1

我试图创建一个具有一对多关系的表。但似乎在Personal中添加外键不起作用。我正在尝试将个人信息表链接到地址表?这个错误的解决方案是什么?SQL Server:无法创建关系

  • Address表成功保存
  • Personal

无法创建关系 'FK_Personal_Address'。
无法在 引用列'Personal.ID'是标识列的情况下创建级联外键'FK_Personal_Address'。不能 创建约束。查看以前的错误。

+1

可以显示查询吗? – Pankaj 2012-02-13 12:45:18

回答

5

Person表中的主键大概是一个标识。这是一个自动递增的整数字段。

您需要在int类型的地址表中创建外键,而不是标识。它将保存与人员记录相对应的整数,但不希望外键自动递增。对于子表(地址)中的每条记录,您将为该外键设置一个特定值,以指示它所属的父记录(Person)。

例子:

INSERT person (firstname, lastname) VALUES ('John', 'Smith') 

这将插入新的个人记录和现场personid会自动,因为它是一个标识字段填写。

现在要插入约翰史密斯的地址,您需要知道他的personid。例如:

-- Say, for example, personid of John Smith is 55 
INSERT address (personid, street, city) VALUES (55, 'High Street', 'London') 

所以在person表中的PERSONID是自动生成的,但在address表指定一个现有的人物一致的值。这是外键的全部。

没有关于您的模式的更多信息,很难猜测问题。

+0

如何为外键设置特定值? – user962206 2012-02-13 13:14:14

+0

你可以分享模式/查询吗? – Pankaj 2012-02-13 13:49:27

1

没有看到问题中的表的结构,我认为最可能的原因是您的子表(地址)中的列被标记为标识列。在外键关系中,父级确定该字段的值,而不是子级。该列可以是子表中的PK,但不是身份。

1

它似乎是你尝试创建一个与自身相关的Personal.ID的外键。

你可能想这样做:

ALTER TABLE Adress WITH NOCHECK ADD CONSTRAINT [FK_Adress_Personnal] FOREIGN KEY(Personal_Id) 
REFERENCES Personal (ID) 
+0

真的有可能吗? – Pankaj 2012-02-13 12:48:20

-1

我与添加外键约束,以我的表之一得到了同样的错误。 我发现解决方法是用NOCHECK添加它。为什么我能够用CHECK添加另外两个外键而不是第三个外键?我发现它不是表格,而是要添加的外键的顺序。任何对此的见解将非常感激。

2

我确保遵循以上答案中讨论的identity,int和主键。但是,我仍然遇到同样的错误。

'xReason' table saved successfully 
'xAddress' table 
- Unable to create relationship 'FK_xAddress_xReason'. 
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_xAddress_xReason". The conflict occurred in database "databaseName", table "dbo.xReason", column 'xReasonID'. 

这个错误,当我插入一些数据到Reason table.(表有一个主键)

如果你读了这么远,这可能是你的问题解决了。