我正在研究组合产品的集成部分,我在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'。
我如何解决此错误或可能是导致此错误的原因。请建议
答案 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)
在子表中插入记录之前,您需要在父表中插入(即)引用参考列的表