272

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

消息 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')

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

4

15 回答 15

336

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

如果您有 SQL Server Management Studio,请将其打开并sp_helpdbo.Sup_Item_Cat”。查看 FK 在哪一列,以及它引用哪个表的哪一列。您正在插入一些错误数据。

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

于 2010-06-03T12:29:15.057 回答
170

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

尽管检查的答案是正确的:

迈克 M 写道——

“FK 的工作方式是它不能在该列中具有不在引用表的主键列中的值。”

这个答案缺少的很简单;

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

另一种说法是;

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

简而言之,许多教程似乎对这个事实视而不见,因此如果您自己尝试并且没有意识到存在操作顺序,那么您会收到此错误。自然添加主键数据后,你的子表中的外键数据必须符合父表中的主键字段,否则还是会报这个错误。

如果有人读到这里。我希望这有助于使检查的答案更清楚。我知道你们中的一些人可能会觉得这种事情很简单,打开一本书会在它发布之前回答这个问题,但事实是,并不是每个人都以同样的方式学习。

于 2014-01-17T20:50:04.660 回答
36

您正试图在外键列中插入一条外键列中不存在的值的记录。

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

于 2010-06-03T12:31:12.230 回答
18

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

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

于 2010-06-03T12:27:35.637 回答
5

从我所见,问题不在于client_id。看起来问题出在第 4 列 sup_item_cat_id

我会跑

sp_helpconstraint sup_item

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

于 2010-06-03T12:44:29.893 回答
5

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

例如,发送“cat dog”与发送“catdog”不同。

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

一旦我修复了给我的问题的 2 个字段,生活就很好!

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

于 2014-05-30T21:06:10.113 回答
3
  1. 运行 sp_helpconstraint
  2. 注意为外键返回的 constraint_keys 列
于 2014-04-12T16:20:15.453 回答
2

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

于 2014-01-06T19:27:50.147 回答
2

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

于 2015-03-05T12:11:48.557 回答
2

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


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

于 2018-12-12T07:19:08.293 回答
1

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

于 2014-05-14T19:12:27.410 回答
1

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

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

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

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

于 2015-10-23T13:40:25.817 回答
1

就我而言,我以错误的顺序将值插入到子表中

对于具有 2 列的表:column1column2,当我错误输入时出现此错误:

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

当我使用以下格式时,错误已解决:-

INSERT INTO Table (column2, column1) VALUES('column2_value', 'column1_value');
于 2020-09-12T06:45:08.447 回答
1

对于使用 mybatis 的我来说,这个问题是可重现和间歇性的。
我确定我有正确的数据库配置(PK、FK、自动增量等)
我确定我有正确的插入顺序(首先是父记录),在调试中我可以看到父记录插入了相应的 PK,然后就在下一个语句在插入具有正确 FK 的子记录时失败。

问题已通过重新播种身份解决

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

在开始工作之前失败的代码完全相同。
我希望有人向我解释导致问题的原因。

于 2021-04-28T22:12:17.113 回答
0

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

于 2021-01-14T17:53:37.817 回答