【发布时间】:2016-04-30 23:00:53
【问题描述】:
我有以下 SQL 代码通过比较两个表中的数据来将数据从一个表插入另一个表。目标表中的 PK 为 [bomItem], [bomRev], [bomEntry]。
如果ItemID in source table = bomItem field in Dest. table AND [rev](field in Source tbl)NOT=[bomRev](in destination tbl),我想插入。
当我尝试运行脚本时,出现以下错误
消息 547,级别 16,状态 0,第 46 行 INSERT 语句与 FOREIGN KEY 约束“FK_MIBOMD_MIBOMH”冲突。冲突发生在数据库“MITESTCO”、表“dbo.MIBOMH”中。 声明已终止。
USE [MITESTCO];
GO
INSERT INTO [MIBOMD]
([bomItem], [bomRev], [bomEntry], [partId], [qty],[lead])
SELECT [ItemID], [rev], [bomEntry], [partid], [qty],[lead]
FROM [assy]
WHERE [rev] IN (SELECT [bomRev] FROM [MIBOMH])
AND [ItemID] IN (SELECT [bomItem] FROM [MIBOMH])
AND [ItemID] IN (SELECT [ItemID] FROM [MIITEM])
AND [partid] IN (SELECT [ItemID] FROM [MIITEM]);
【问题讨论】:
-
错误与查询无关,而是与数据库表的设计结构有关。正如错误所说,违反了外键约束,其名称可能涉及附加表
dbo.MIBOMD和dbo.MIBOMH。也许您在这两个(父/子)之间有一对多的表关系,并且在子中附加记录,使连接的父 ID 为 NULL。 -
@Parfait 谢谢!是的,我有一对多的关系,并且我在父级和子级中有相同的数据/记录,唯一的 d/c 是
rev字段。父表中的主键是bomRev和bomItem。我该如何解决你所说的 Apeending 但我不知道这是如何工作的你能解释一下吗? -
您可以考虑暂时关闭约束,插入并重新打开。
-
@freakyhat 谢谢 我怎样才能把它加回约束?
标签: sql sql-server sql-server-2008 sql-insert