一个非常基本的脚本使我发疯。它说它找不到引用的键。不知道这是怎么回事。我正在使用SQL Server 2014,此脚本是为了创建我的数据库表。我正在尝试在表TABLE_2
中进行id_TABLE_1
参考表TABLE_1
的ID。
CREATE TABLE TABLE_1
(
id int identity,
email varchar(50) not null,
constraint PK_TABLE_1 primary key (id,email)
)
GO
CREATE TABLE TABLE_2
(
id int identity,
id_TABLE_1 int not null,
constraint PK_TABLE_2 primary key (id),
constraint FK_TABLE_2 foreign key (id_TABLE_1)
references TABLE_1(id) on delete cascade
)
GO
错误是:
msg 1776,级别16,状态0,行32
参考表'表_1'中没有主键或候选键,与外键'fk_table_2'中的参考列列表匹配。msg 1750,级别16,状态0,行32
无法创建约束或索引。请参阅以前的错误。
您可以在这里帮我吗?
根据注释,您正在尝试引用不存在的索引。TABLE_1
表上的主要键是一个复合键,包含两列:id
和email
。
为此,您可以将主键更改为:
CONSTRAINT PK_TABLE_1 PRIMARY KEY (id)
或仅在id
列上创建新索引:
CREATE INDEX IX_TABLE_1_id ON TABLE_1 (id);
拥有包含身份列的复合主键是没有意义的。ID列已经是唯一的,因此应该是主要键。
如果您希望电子邮件也是唯一的,请从主键中删除它并将其声明为唯一。