我需要做出一些改变,以一个SQL Server 2008数据库。
这需要一个新表的创建,并插入新表中引用一个已经存在的表的主键的外键。所以,我想建立我的新tblTwo,它引用tblOne的主键之间的关系。
然而,当我试图做到这一点(通过SQL Server Management Studio中)我得到了以下错误:
在表“tblOne”列不匹配现有的主键或唯一约束
我真的不知道这意味着什么,我想知道如果有周围没有任何办法吗?
这意味着,在tblOne主键未正确申报 - 你需要去tblOne并添加主键约束返回到它。
如果你确信tblOne确实有一个主键约束,那么也许有你的DB多个tblOne表,属于不同的模式,并在你的FK约束的引用子句选错了一个。
如果有一个复合键(其中您的评论将指示),那么你必须在你的外键引用包括两列也。需要注意的是一个表不能有多个主键 - 但如果它有一个复合键,你会看到旁边是主键的一部分,每列一个重要标志。
我找到了另一种方式来得到这个错误。如果你正试图使在SQL Management Studio中的设计视图中的递归外键(外键主键在同一个表)也会发生这种情况。如果您还没有保存该表的主键,将返回此消息。只要保存表,然后它可以让你创建的外键。
如果您在表中有数据,这可能是问题。
在我来说,我在我装在下午3点的帐户表中的一些数据,并在联系表中的一些数据,我装在下午3:10,所以联系表有这样的人不在我的帐户表还有些价值。
我结束了从接触表中删除这些值,然后设法增加一个键没有任何问题。
如果你有一个复合键创建FK时的顺序很重要,有时顺序是它不显示方式。
我要做的就是去表1的按键部分,然后选择脚本的主键创建到剪贴板,然后创建一个使用顺序FK如图脚本
如果仍然出现这个错误,你遵循了上述所有的答案建议后,一切看起来正确的。
要解决这个问题的方法之一是通过删除主键中的两个表,保存,刷新,再添加。然后尝试再次添加的关系。
我有这种情况,导致我这个话题。同样的错误,但另一个原因。也许这将帮助别人。
Table1
ColA (PK)
ColB (PK)
ColC
Table2
ID (PK)
ColA
COLB
当试图在表2建立外键我从相反的顺序组合框中选择值
Table1.ColB = Table2.ColB
Table1.ColA = Table2.ColA
这被扔我的错误,如在主题名称。在创建主键表列的FK维持秩序,因为他们,做出错误消失。
愚蠢的,但.. :)
此错误发生与我When
我试图add foreign key
约束从PrimaryKey Table
开始
SimPy中去别的桌子和create this foreign key
约束from
有(foreign key Table)
这个问题抓住了我,我将在错误的表之间的关系。所以,如果你想添加表A表B的关系,尝试将表B中表A的关系
这看起来像你正试图创建一个tblTwo外键不与任何tblOne主键或唯一索引匹配(或参与)。
检查关于它MSDN此链接。在这里,你有一个practical case另一个链接。
编辑:
回答您的意见,我明白你的意思也有在主键2场(这使它成为一个复合)。在SQL是不可能有在同一个表2的主键。
恕我直言,一个外键字段应该始终是指在引用表中的单个寄存器(即在你的情况下,整个主键)。这意味着你需要在创建外键前就摆在tblTwo的tblOne主键的两个领域。
无论如何,我已经调查了一下在互联网上,它似乎SQL Server 2008的(如一些之前的版本和其他RDBMS)为您提供了可能性,只要这部分是一个候选键(非空引用主键的唯一组成部分,唯一的),你就可以创建一个唯一约束。
我不知道,你可以使用你的情况,但检查这个link关于它的更多信息。
我发现,列名必须匹配。
例如:所以,如果tblOne已经CATEGORYID ID叫tblTwo参考也必须叫的categoryId。
_tblname, primary key name, foreign key_
tblOne, "categoryId", none
tblTwo, "exampleId", "categoryId"
要创建2个表,无论有列名“ID”作为主键之间的外键时,我注意到这一点。
如果没有什么帮助,那么这可能是原因:考虑到这种情况:表A:第1列(主键)第2列(主键)列第3栏第4
表B:柱一个(主键)b栏c栏
当要定义一个依赖B到A,这样你就被迫尊重其初选定义的顺序。
这意味着你的依赖应该是这样的:表A表B第1米栏第-B柱上2 c栏
AND NOT:表A表B栏第2栏C色谱柱1个b栏
那么这将导致您所遇到的错误。