获取错误:INSERT语句与FOREIGN KEY约束冲突

时间:2012-12-25 11:27:15

标签: sql sql-server sql-server-2008

我正在研究组合产品的集成部分,我在SQL Server 2008中预装了数据库。我无法直接插入或更新数据库我可以通过本产品开发人员提供的API来实现。

每当我通过API插入特定交易类型时,我都会收到错误消息 -

  

数据库'usp_Financial_KernelComponents_Index_Insert_Batch_5'   命令失败。 INSERT语句与FOREIGN KEY冲突   约束“FK_Fixings_id_Index_fixingsId”。冲突发生在   数据库“Portfolio_new”,表“dbo.Financial_Shared_Fixings”,列   'ID'。

我如何解决此错误或可能是导致此错误的原因。请建议

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

外键约束意味着列或列组的值必须存在于另一个表的行中,通常作为其主键。这是一个例子:

create table country (id int not null, name varchar(100))
create table city(id int not null, country_id int, name varchar(100))

如果在city上设置外键约束,要求country_id表中存在country,则尝试插入带有city的{​​{1}} country_id ID 1}}会导致外键约束违规。

在您的情况下,API可能需要一组值,其中一个值必须是某种ID(或者可以通过其检索ID的二级密钥)。将无效的{{1}}传递给此类API时,会触发外键约束违规。

答案 2 :(得分:1)

当您尝试在外键列中插入值时,会发生此错误,该值在其父表中不存在。例如,您正在尝试将值X插入Order表中的CustomerId,该值在Customer表中不存在。发生此错误是因为我们需要一个良好的参考完整性策略。因此,您唯一需要做的就是检查您的新值(您将把它们插入到表中)以找出是否存在损害此规则的任何值。

请检查以下问题,您可能会在此处找到有关此错误的相同信息 Foreign Key constraint failure and error message when inserting values

答案 3 :(得分:0)

用最简单的术语来说,在插入父行之前插入一个“子”行

在插入子行的那一刻,违反了子父(即外键)约束 - 孩子的父母似乎不存在。

要修复,请将插入顺序反转为父级,然后是子级(ren)。

答案 4 :(得分:-1)

在子表中插入记录之前,您需要在父表中插入(即)引用参考列的表