关于INSERT语句与FOREIGN KEY约束冲突:INSERT语句与FOREIGN KEY约束冲突 – SQL Server

INSERT statement conflicted with the FOREIGN KEY constraint - SQL Server

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

Msg 547, Level 16, State 0, Line 1
The INSERT statement conflicted with the FOREIGN KEY constraint"FK_Sup_Item_Sup_Item_Cat". The conflict occurred in database"dev_bo", table"dbo.Sup_Item_Cat". The statement has been terminated.

码:

1
2
3
4
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')

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


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

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

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


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

尽管检查答案是正确的:

Mike M wrote-

"The way a FK works is it cannot have a value in that column that is
not also in the primary key column of the referenced table."

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

You must build the table containing the Primary Key first.

另一种说法是;

You must Insert Data into the parent table, containing the Primary
Key, before attempting to insert data into the child table containing
the Foreign Key.

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

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


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

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


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

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


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

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

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

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

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


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

我会跑

1
sp_helpconstraint sup_item

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


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


父表数据丢失导致问题。
在您的问题中,"dbo.Sup_Item_Cat"中的数据不可用会导致问题


  • 运行sp_helpconstraint
  • 将ATTENTION注意到为外键返回的constraint_keys列

  • 仔细检查为其定义外键的关系中的字段。在定义关系时,SQL Server Management Studio可能没有您想要选择的字段。这让我过去很烦。


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

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


    当我的插入值字段包含肉眼不明显的标签和空格时,我遇到了这个问题。我在Excel中创建了我的值列表,将其复制并粘贴到SQL,然后运行查询以查找我的FK字段上的不匹配项。

    匹配查询未检测到我的FK字段中有选项卡和空格,但INSERT确实识别它们并继续生成错误。

    我通过在一个记录中复制FK字段的内容并将其粘贴到插入查询中再次进行测试。当该记录也失败时,我仔细查看数据并最终检测到标签/空格。

    一旦我清理了删除的标签/空格,我的问题就解决了。希望这有助于某人!


    当我使用代码优先迁移为MVC 5应用程序构建数据库时,我遇到了同样的问题。我最终在配置文件中找到了种子方法导致问题。我的种子方法是在创建具有匹配主键的条目之前为包含外键的表创建表条目。