我试图创建一个具有一对多关系的表。但似乎在Personal中添加外键不起作用。我正在尝试将个人信息表链接到地址表?这个错误的解决方案是什么?SQL Server:无法创建关系
Address
表成功保存Personal
表
无法创建关系 'FK_Personal_Address'。
无法在 引用列'Personal.ID'是标识列的情况下创建级联外键'FK_Personal_Address'。不能 创建约束。查看以前的错误。
我试图创建一个具有一对多关系的表。但似乎在Personal中添加外键不起作用。我正在尝试将个人信息表链接到地址表?这个错误的解决方案是什么?SQL Server:无法创建关系
Address
表成功保存Personal
表无法创建关系 'FK_Personal_Address'。
无法在 引用列'Personal.ID'是标识列的情况下创建级联外键'FK_Personal_Address'。不能 创建约束。查看以前的错误。
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
表指定一个现有的人物一致的值。这是外键的全部。
没有关于您的模式的更多信息,很难猜测问题。
如何为外键设置特定值? – user962206 2012-02-13 13:14:14
你可以分享模式/查询吗? – Pankaj 2012-02-13 13:49:27
没有看到问题中的表的结构,我认为最可能的原因是您的子表(地址)中的列被标记为标识列。在外键关系中,父级确定该字段的值,而不是子级。该列可以是子表中的PK,但不是身份。
它似乎是你尝试创建一个与自身相关的Personal.ID的外键。
你可能想这样做:
ALTER TABLE Adress WITH NOCHECK ADD CONSTRAINT [FK_Adress_Personnal] FOREIGN KEY(Personal_Id)
REFERENCES Personal (ID)
真的有可能吗? – Pankaj 2012-02-13 12:48:20
我与添加外键约束,以我的表之一得到了同样的错误。 我发现解决方法是用NOCHECK添加它。为什么我能够用CHECK添加另外两个外键而不是第三个外键?我发现它不是表格,而是要添加的外键的顺序。任何对此的见解将非常感激。
我确保遵循以上答案中讨论的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.
(表有一个主键)
如果你读了这么远,这可能是你的问题解决了。
可以显示查询吗? – Pankaj 2012-02-13 12:45:18