Sql server 2005 SQL Server-外键引用错误
我有两个表,Sql server 2005 SQL Server-外键引用错误,sql-server-2005,foreign-keys,primary-key,composite-primary-key,Sql Server 2005,Foreign Keys,Primary Key,Composite Primary Key,我有两个表,Table_1有4列(3个主键)和Table_2有2列。当我试图在表2中创建外键约束时,出现以下错误: 以下是我的表格的定义: 表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_Lat
Table_1
有4列(3个主键)和Table_2
有2列。当我试图在表2
中创建外键约束时,出现以下错误:
以下是我的表格的定义:
表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]
你知道怎么解决这个问题吗?谢谢-表1的主键是
字段1
、字段2
和字段3
中的所有三个。为了引用另一个表中的键,您必须引用该键中的所有列-因此您需要将Field_2
和Field_3
添加到table_2
,并在尝试创建外键约束时包含所有三列
或者,如果
字段_1
本身是表_1
的键,则通过重新定义主键或仅在字段_1
上向表_1
添加唯一的约束来声明它。然后,您就可以创建您试图创建的外键。字段_1
不是主键。您应该通过可视内容将其设置为主键,或者将表1
的脚本更改为[Field\u 1][tinyint]主键
,Hi Lieven,很抱歉,我忘了在示例表中添加主键。无论如何,我已经更新了我的表,现在定义了主键。但是我仍然遇到同样的错误。为了让SQL Server能够创建外键,它必须确保对于给定的外键只能返回一条记录。由于在多个字段上有主键,因此不能保证Field_1
是唯一的。如果您不能更改主键,您所能做的就是在表\u 1.字段\u 1
上添加唯一索引。如果也无法创建唯一索引,则无法创建外键。添加唯一约束可解决此问题。谢谢Damien!