INSERT语句与FOREIGN KEY约束 - SQL Server冲突

Sma*_*EGA 213 sql sql-server sql-server-2005 foreign-keys

我收到以下错误.请你帮助我好吗?

消息547,级别16,状态0,行1
INSERT语句与FOREIGN KEY约束"FK_Sup_Item_Sup_Item_Cat"冲突.冲突发生在数据库"dev_bo",表"dbo.Sup_Item_Cat"中.该语句已终止.

码:

insert into sup_item (supplier_id, sup_item_id, name, sup_item_cat_id, 
                      status_code, last_modified_user_id, last_modified_timestamp, client_id)   
values (10162425, 10, 'jaiso', '123123',
        'a', '12', '2010-12-12', '1062425')
Run Code Online (Sandbox Code Playgroud)

最后一列client_id导致错误.我试图将已存在的值dbo.Sup_Item_Cat放入列中,对应于sup_item ..但没有欢乐:-(

小智 270

在您的表中dbo.Sup_Item_Cat,它具有对另一个表的外键引用.FK的工作方式是它不能在该列中具有值,该值也不在引用表的主键列中.

如果您有SQL Server Management Studio中,打开它,并sp_help" dbo.Sup_Item_Cat".查看FK所在的列以及它引用的表的哪一列.您正在插入一些不良数据.

如果您需要更好的解释,请告诉我们!

  • 感谢您提供sp_help命令!帮助我缩小了我的类似问题. (10认同)
  • Alt + F1 是 sp_help 的快捷方式,对于未来的读者,选择表并按 alt + f1 (2认同)

小智 124

我自己有这个问题,关于尝试填充外键字段时收到的错误消息.我最终在这个页面上希望找到答案.在这个页面上检查的答案确实是正确的答案,不幸的是我觉得对于不熟悉SQL的人来说答案有点不完整.我非常擅长编写代码,但SQL查询对我来说是新的,也是构建数据库表的新东西.

尽管检查答案是正确的:

迈克M写道 -

"FK的工作方式是它不能在该列中具有值,该值也不在引用表的主键列中."

这个答案缺少的只是简单的;

您必须首先构建包含主键的表.

另一种说法是;

在尝试将数据插入包含外键的子表之前,必须将数据插入到包含主键的父表中.

简而言之,许多教程似乎都在掩盖这个事实,所以如果你自己尝试并且没有意识到有一个操作顺序,那么你会得到这个错误.自然地,在添加主键数据之后,子表中的外键数据必须符合父表中的主键字段,否则您仍会收到此错误.

如果有人读到这么远.我希望这有助于使检查的答案更加清晰.我知道你们中有些人可能会认为这种事情是相当紧张的,并且在发布之前开一本书会回答这个问题,但事实是并非每个人都以同样的方式学习.


Mat*_*ith 20

您正在尝试在外键表中不存在的外键列中插入带有值的记录.

例如:如果您有Books和Authors表,其中Books对Authors表具有外键约束,并且您尝试插入没有作者记录的书记录.


Jus*_*ner 15

您需要发布您的声明以获得更多说明.但...

该错误意味着您要插入数据的表与另一个表具有外键关系.在插入数据之前,外键字段中的值必须首先存在于另一个表中.


Don*_*nie 7

这正是它所说的意思。您正在尝试将一个值插入到一个列中,该列上有一个 FK 约束,该约束与查找表中的任何值都不匹配。


Cha*_*mar 6

我的 SQL 代码中也出现了同样的错误,这个解决方案对我有用,


检查主表中的数据可能是您输入了主键列中不存在的列值。


Cob*_*sve 5

问题不在于我所看到的client_id.它看起来更像问题是第4列sup_item_cat_id

我会跑

sp_helpconstraint sup_item
Run Code Online (Sandbox Code Playgroud)

并注意为外键FK_Sup_Item_Sup_Item_Cat返回的constraint_keys列以确认哪个列是实际问题,但我很确定它不是您要修复的那个.除了'123123'看起来也很可疑.


Joh*_*ski 5

我找到的东西是所有的领域必须完全匹配.

例如,发送"猫狗"与发送"catdog"不同.

我为解决这个问题所做的是从我插入数据的表中编写FK代码,记下具有约束的"外键"(在我的情况下有2个)并确保这两个字段值匹配正如他们在表中抛出FK约束错误一样.

一旦我解决了两个问题,我的生活就很好了!

如果您需要更好的解释,请告诉我.