2016-04-30 127 views
0

我有以下SQL代码通过比较两个表中的数据将数据从一个表插入另一个表。目的地表中的PK是[bomItem], [bomRev], [bomEntry]插入语句以将数据从一个表插入另一个表

我想插入如果ItemID in source table = bomItem field in Dest. tableAND[rev](field in Source tbl)NOT=[bomRev](in destination tbl)

当我试图运行该脚本,我收到以下错误

消息547,级别16,状态0,46号线 INSERT语句冲突与外键约束“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]); 
+0

错误有没有直接与你的数据库的查询,但设计结构做表。由于错误表示外键约束被违反,其名称可能涉及附加表,“dbo.MIBOMD”与“dbo.MIBOMH”有关。也许你在这两个(父/子)之间有一对多的表关系,并将子记录添加到子项中,从而使连接的父ID为NULL。 – Parfait

+0

@Parfait谢谢!是的,我有一对多的关系,并且我在父母和孩子中拥有相同的数据/记录,唯一的d/c是“rev”字段。父表中的主键是'bomRev'和'bomItem'。我如何解决这个问题你说Apeending但我不知道如何工作你能解释我更多? – Kin

+1

检查你的约束:http://stackoverflow.com/questions/2499332/how-to-check-if-a-constraint-exists-in-sql-server – Parfait

回答

0

要禁用所有约束在数据库 -

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all" 

-- Insert data 

要切换回上 -

exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all" 
相关问题