插入语句与外键约束冲突- SQL Server

我得到以下错误。你能帮帮我吗?

Msg 547,级别16,状态0,行1
INSERT语句与外键约束“FK_Sup_Item_Sup_Item_Cat”冲突。数据库“dev_bo”,表“dbo.Sup_Item_Cat”发生冲突。

. {/p> .

代码:

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..但没有快乐:-(

863575 次浏览

你需要发布你的声明以得到更多的澄清。但是…

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

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

如果你有SQL Server Management Studio,打开它并sp_help 'dbo.Sup_Item_Cat'。查看FK在哪个列上,以及它引用了哪个表的哪个列。你插入了一些坏数据。

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

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

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

在我看来,问题不在于client_id。看起来问题更像是第四列sup_item_cat_id

我会逃跑

sp_helpconstraint sup_item

并注意为外键FK_Sup_Item_Sup_Item_Cat返回的constraint_keys列,以确认哪一列是实际问题,但我非常确定这不是您试图解决的问题。此外,123123看起来也很可疑。

仔细检查为之定义外键的关系中的字段。在定义关系时,SQL Server Management Studio可能没有选择所需的字段。这在过去让我很痛苦。

我自己也有这个问题,关于试图填充外键字段时收到的错误消息。我来到这一页,希望能找到答案。本页上选中的答案确实是正确的,不幸的是,我觉得这个答案对于不熟悉SQL的人来说有点不完整。我很擅长写代码,但SQL查询和构建数据库表对我来说都是新的。

尽管选中的答案是正确的:

迈克·M写道:

" FK的工作方式是它不能在那一列中有值 也不是在引用表的主键列中。

这个答案中缺少的是;

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

另一种说法是;

必须将数据插入父表,其中包含Primary表 键,然后再尝试将数据插入到包含

. . .

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

如果有人读到这里。我希望这能让你的答案更清楚。我知道你们中的一些人可能会觉得这类事情很简单,打开一本书就能回答这个问题,但事实是,不是每个人都以同样的方式学习。

  1. 运行sp_helpconstraint
  2. 注意为外键返回的constraint_keys列

当我使用代码优先迁移来为MVC 5应用程序构建数据库时,我也遇到了同样的问题。我最终发现我的configuration.cs文件中的种子方法导致了这个问题。我的seed方法是在创建带有匹配主键的表项之前,为包含外键的表创建一个表项。

我发现所有的字段都必须完全匹配。

例如,发送'catdog'和发送'catdog'是不一样的。

我所做的故障排除是脚本从表的FK代码,我正在插入数据,注意到“外键”有约束(在我的情况下有2),并确保这2个字段值完全匹配,因为他们在抛出FK约束错误的表。

一旦我解决了这两个领域给我的问题,生活是美好的!

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

父表数据缺失导致问题。 在您的问题中,“dbo”中的数据不可用。Sup_Item_Cat"导致问题

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

匹配查询没有检测到FK字段中有制表符和空格,但INSERT确实识别了它们,并继续生成错误。

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

一旦我清理了删除的制表符/空格,我的问题就解决了。希望这能帮助到一些人!

我也得到了同样的错误在我的SQL代码,这个解决方案为我工作,


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

在我的例子中,我是以错误的顺序将值插入子表:

对于有2列的表:column1column2,当我错误地输入时,我得到了这个错误:

INSERT INTO Table VALUES('column2_value', 'column1_value');

当我使用下面的格式时,错误得到了解决

INSERT INTO Table (column2, column1) VALUES('column2_value', 'column1_value');

如果FK列表应该包含FK值作为主键值,则将插入数据。

这个问题是可重复的和间歇性的,我使用mybatis。
我确信我有正确的DB配置(PK, FK,自动增量等)
我确信我有正确的插入顺序(父记录先),在调试中,我可以看到父记录插入各自的PK,就在下一个语句失败后插入子记录与正确的FK

这个问题是通过重新播种身份来解决的

DBCC CHECKIDENT ('schema.customer', RESEED, 0);
DBCC CHECKIDENT ('schema.account', RESEED, 0);

在开始工作之前失败的完全相同的代码。
我希望有人能给我解释一下是什么原因导致了这个问题