1

我正在研究产品组合的集成部分,我在 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”中。

我该如何解决这个错误或者这个错误的可能原因是什么。请建议

4

5 回答 5

3

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

于 2012-12-25T11:31:57.820 回答
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无效country_id的 a 将导致外键约束违规。

在您的情况下,API 可能采用一组值,其中一个必须是ID某种类型的值(或可以通过其检索 ID 的辅助键)。当您将无效值传递ID给此类 API 时,将触发外键约束违规。

于 2012-12-25T11:36:01.633 回答
1

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

请检查以下问题,您可能会在其中找到有关此错误 外键约束失败和插入值时的错误消息的相同信息

于 2015-10-19T12:18:48.447 回答
0

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

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

要解决此问题,请将插入顺序颠倒为父级,然后是子级(ren)。

于 2012-12-25T11:37:59.680 回答
-1

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

于 2012-12-25T11:51:14.703 回答