一个非常基本的脚本让我发疯。它说它找不到引用的密钥。不知道它是什么。我正在使用SQL SERVER 2014,这个脚本用于创建我的数据库表。我正在尝试让表id_TABLE_1
中的TABLE_2
引用表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
错误是:
消息1776,级别16,状态0,行32
引用的表'TABLE_1'中没有主键或候选键与外键'FK_TABLE_2'中的引用列列表匹配。消息1750,级别16,状态0,行32
无法创建约束或索引。查看以前的错误。
你能帮助我吗?
答案 0 :(得分:5)
根据评论,您正在尝试引用不存在的索引。 TABLE_1
表上的主键是一个包含两列的复合键:id
和email
。
要进行编译,您可以将主键更改为:
CONSTRAINT PK_TABLE_1 PRIMARY KEY (id)
或仅在id
列上创建新索引:
CREATE INDEX IX_TABLE_1_id ON TABLE_1 (id);
答案 1 :(得分:-1)
拥有包含标识列的复合主键是没有意义的。 id列已经是唯一且非NULL,因此它应该是主键。
如果您希望电子邮件也是唯一的,请将其从主键中删除,并将其声明为唯一。