SQL Server - 外键参考错误
问题描述:
我有两个表,Table_1
4列(3主键)和Table_2
2列。当我尝试创建Table_2
一个外键约束,我收到此错误:SQL Server - 外键参考错误
这里是我的表的定义:
TABLE_1
CREATE TABLE [dbo].[Table_1]
(
[Field_1] [tinyint] NOT NULL,
[Field_2] [tinyint] NOT NULL,
[Field_3] [tinyint] NOT NULL,
[Field_4] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED
(
[Field_1] ASC,
[Field_2] ASC,
[Field_3] ASC
)
表2
CREATE TABLE [dbo].[Table_2]
(
[Field_1] [tinyint] NOT NULL,
[Field_2] [tinyint] NOT NULL
) ON [PRIMARY]
你对如何解决这个问题有任何想法吗?谢谢 -
答
的Table_1
主键是Field_1
,Field_2
和Field_3
的所有三个。为了引用另一个表中的密钥,您必须引用该密钥中所有列的 - 因此您需要将Field_2
和Field_3
添加到Table_2
,并且在尝试创建外键时包含所有三列约束。
替代地,如果Field_1
,其本身是一个Table_1
键,然后通过重新定义主键,或对刚才Field_1
到Table_1
添加UNIQUE
约束声明它是这样,无论是。然后你就可以创建你正在尝试的外键。
+0
添加一个UNIQUE约束解决了这个问题。谢谢Damien! – neztreh 2012-04-27 13:11:05
'Field_1'不是主键。您应该通过视觉主题将其设置为主键,或将'Table_1'的脚本更改为'[Field_1] [tinyint] PRIMARY KEY', – 2012-04-27 10:24:49
Hi Lieven,对不起,我忘记在我的示例中添加主键表。无论如何,我已经更新了我的表格,现在已经定义了主键。但是我仍然遇到同样的错误。 – neztreh 2012-04-27 10:35:16
要使SQL Server能够创建外键,必须确保只有一个**记录可以返回给定的外键。由于您在多个字段上有主键,因此不能保证“Field_1”是唯一的。如果您无法更改主键,则只需在'Table_1.Field_1'上添加一个唯一索引即可。如果唯一索引也不可用,则不能创建外键。 – 2012-04-27 10:41:35