2016-04-30 138 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" 
相關問題