2010-06-03 231 views
151

我收到以下错误。你可以帮我吗?INSERT语句与FOREIGN KEY约束冲突

消息547,级别16,状态0,第1行
INSERT语句冲突与外键约束 “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 ..但没有快乐:-(

+10

您已尝试将记录插入到您的“Sup_Item_Cat”表中没有匹配类别记录的项目表中。没什么其他可以说的。 – 2010-06-03 12:27:31

+1

所以你是说'SELECT * FROM Sup_Item_Cat WHERE sup_item_cat_id ='123123''返回结果? – 2010-06-03 12:36:16

+2

你也说“最后一次coulum”client_id“我正在发生冲突。”这不是错误信息暗示我认为你在错误的地方寻找你的问题。 – 2010-06-03 12:38:32

回答

185

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

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

让我知道你是否需要任何解释更好的东西!

+4

感谢您使用sp_help命令!帮助我缩小了我的类似问题。 – 2012-06-05 15:36:11

+0

事实上 - 在我的情况下,该属性只是没有从视图发回控制器,所以它始终为0(这不是一个有效的ID,但控制器将无法知道这一点。) – neminem 2013-12-04 19:49:39

4

它意味着它的含义。您试图将值插入列在其上有一个FK约束不查找表匹配任何值。

14

你需要发表您的发言更多的澄清。但是......

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

14

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

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

顺便说一句,在Google一个简单的搜索会给你答案......

+0

请检查我编辑的问题 – SmartestVEGA 2010-06-03 12:35:30

+2

@伊恩编辑了我的最后一句话。我把它放回去了。最后一个陈述并不是“咆哮”,它是一个有用的链接,可以链接到谷歌搜索,它将返回OP正在寻找的答案。我仍然相信“教人钓鱼”。温和提醒自己可以对OP,读者和本网站产生积极的影响。根据我的愚见,在请别人花时间回答你的问题之前,最好先用尽自己的研究。这个问题现在已经成为谷歌搜索的首要问题。 – 2016-01-04 18:39:41

6

的问题不是从我所看到的CLIENT_ID。它看起来更像问题是与第4列,sup_item_cat_id

我会跑

sp_helpconstraint sup_item 

并注意外键FK_Sup_Item_Sup_Item_Cat确认其列是实际的问题列返回constraint_keys,但我非常确定这不是你正在尝试解决的问题。除了“123123”外,还有可疑之处。

3

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

81

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

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

麦克中号wrote-

“一个FK的工作方式是不能在列,它是 不也是在主键有一个值被引用表的列“。

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

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

另一种说法是:

您必须将数据插入父表,包含主 重点,试图将数据插入含有 外键的子表之前。

总之,许多教程似乎玻璃在这个事实,这样,如果你要自己尝试一下,并没有意识到有操作的顺序,那么你会得到这个错误。当然,在添加主键数据后,子表中的外键数据必须符合父表中的主键字段,否则您仍然会收到此错误。

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

+0

并且我会添加,请确保分析您的查询,因为它并不总是将您认为应该发送到数据库的内容。 – HLGEM 2014-01-17 21:01:05

+0

感谢您的简单... – 2018-01-02 14:22:59

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

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

6

我发现的东西是所有的字段必须完全匹配。

例如,发送'猫狗'和发送'猫狗'不一样。

我所做的解决这个问题的方法是从我插入数据的表格中编写出FK代码,记下具有约束的“外键”(在我的情况下有2个),并确保这些2个字段的值完全匹配,因为它们在引发FK约束错误的表中。

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

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

+0

这真的帮助我哈哈!忽略了这个事实,解决了我有的问题!谢谢 – 2015-04-24 10:51:51

3

父表中的数据,因此导致problem.For上述问题,该数据不可用在表dbo.Sup_Item_Cat”

+1

您的答案虽然可能没有错,但是如何提供其他答案中尚未包含的其他信息?请尝试回答帖子,当您可以有其他答案尚未完全覆盖的有效参数。 – 2015-03-05 09:43:35

3

父表中的数据丢失造成的问题。 在你的问题非可用性“dbo.Sup_Item_Cat”中的数据导致问题

2

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

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

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

一旦我清理删除的标签/空格,我的问题已解决。希望这可以帮助别人!

相关问题