ChatGPT解决这个技术问题 Extra ChatGPT

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

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

消息 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.. 但没有喜悦:-(

您尝试将一条记录插入到您的项目表中,但该记录在您的 Sup_Item_Cat 表中没有匹配的类别记录。没什么好说的了。
所以你是说 SELECT * FROM Sup_Item_Cat WHERE sup_item_cat_id = '123123' 返回结果?
你还说“最后一个库伦“client_id”我遇到了冲突。”这不是错误消息所暗示的,我认为您正在寻找错误的地方来解决您的问题。

D
Danny Fardy Jhonston Bermúdez

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

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

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


感谢您包含 sp_help 命令!帮助我缩小了类似问题的范围。
确实-在我的情况下,该属性只是没有从视图发送回控制器,因此它始终为 0(这不是有效的 id,但控制器无法知道这一点。)
Alt + F1 是 sp_help 的快捷方式,对于未来的读者,选择表格并按 alt + f1
C
Community

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

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

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

这个答案缺少的很简单;

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

另一种说法是;

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

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

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


并且我要补充一点,确保分析您的查询,因为它并不总是将您认为应该是的内容发送到数据库。
@plasmasnakeneo 感谢您的解释。如果你问我的话,我认为你的评论会让肉在骨头上。有时人们认为你应该很容易掌握一些东西而不需要详细说明,而你已经花了很长时间来解释问题可能是什么。为此,我想说一声非常感谢。
K
Katianie

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

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


再简单不过了。谢了哥们。干杯
最后是一些可以理解的东西,它不是隐藏在文字墙后面的东西。谢谢你
M
Micky

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

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


C
Cobusve

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

我会跑

sp_helpconstraint sup_item

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


J
John Waclawski

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

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

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

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

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


这真的帮了我哈哈!忽略了这个事实,解决了我遇到的一个问题!谢谢
m
mns

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

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

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

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


u
user1424678

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


d
dotnet

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


P
Paulie22

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


s
sathish

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


C
Chandan Kumar

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

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


M
Mike

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

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

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

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


P
Pawel Veselov

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

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

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

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

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

H
Harry

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