SQL Server:无法创建关系

时间:2012-02-13 12:30:41

标签: sql-server sql-server-2008 sql-server-2005 foreign-keys foreign-key-relationship

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

  • Address表已成功保存
  • Personal
  

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

5 个答案:

答案 0 :(得分:5)

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

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

示例:

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

这将插入新的人员记录,字段personid将自动填充,因为它是一个IDENTITY字段。

现在要从John Smith插入地址,您需要知道他的personid。例如:

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

因此,在person表中,personid会自动生成,但在address表中,您可以指定与现有人匹配的值。这就是外键的重点。

如果没有关于您的架构的更多信息,很难猜到这个问题。

答案 1 :(得分:2)

我确保遵循上面回答中讨论的identity,int和primary key。但是,我仍然得到同样的错误。

'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.(具有主键的表)时,此错误已解决

如果你读到这里,这可能是你的问题。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

您似乎尝试在与自身相关的Personal.ID上创建外键。

你可能想做类似的事情:

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

答案 4 :(得分:-1)

我在其中一个表中添加外键约束时遇到了同样的错误。 我发现解决方法是使用NOCHECK添加它。为什么我能用CHECK添加另外两个外键但不能添加第三个外键?我发现它不是表,而是要添加的外键的顺序。对此有任何见解将非常感激。