SQL Server 2008:表中的列与现有主键或唯一约束不匹配

109*_*793 56 sql sql-server foreign-keys foreign-key-relationship

我需要对SQL Server 2008数据库进行一些更改.

这需要创建一个新表,并在新表中插入一个引用已存在表的主键的外键.所以我想在我的新tblTwo之间建立一个关系,它引用了tblOne的主键.

但是,当我尝试这样做(通过SQL Server Management Studio)时,我收到以下错误:

表'tblOne'中的列与现有主键或UNIQUE约束不匹配

我不确定这意味着什么,我想知道它是否有任何解决方法?

Dam*_*ver 81

这意味着tblOne中的主键尚未正确声明 - 您需要转到tblOne并将PRIMARY KEY约束添加回它.

如果你确定tblOne确实有一个PRIMARY KEY约束,那么你的数据库中可能有多个tblOne表,属于不同的模式,你的FK约束中的references子句选错了.

如果有一个复合键(您的注释将指示),那么您还必须在外键引用中包含这两列.请注意,表不能有多个主键 - 但如果它有一个复合键,您将在每个列旁边看到一个键符号作为主键的一部分.

  • 按照"alanh" - 密钥顺序对于复合密钥很重要 (7认同)

ala*_*anh 55

如果您有复合键,则在创建FK时顺序很重要,有时订单不是如何显示的.

我所做的是转到table1的Keys部分,选择脚本主键作为创建到剪贴板,然后使用脚本中显示的顺序创建FK

  • 这是一个主要答案.谢谢,这真的很有帮助. (3认同)

100*_*00r 5

我曾经遇到过这样的情况,这让我想到了这个话题。同样的错误,但另一个原因。也许它会对某人有所帮助。

Table1
ColA (PK)
ColB (PK)
ColC


Table2
ID (PK)
ColA
COLB
Run Code Online (Sandbox Code Playgroud)

当尝试在 Table2 中创建外键时,我以相反的顺序从组合框中选择值

Table1.ColB = Table2.ColB
Table1.ColA = Table2.ColA
Run Code Online (Sandbox Code Playgroud)

这给我带来了一个错误,比如主题名称。创建 FK 保持主键表中列的顺序不变,使错误消失。

愚蠢,但是..:)


Rua*_*uan 5

如果您在遵循上述答案的所有建议并且一切正常后仍然出现错误.

解决此问题的一种方法是删除两个表的主键,保存,刷新,然后重新添加.然后尝试再次添加您的关系.