0

我想將5000條記錄以下面的格式填充到特定的表中。在SQL Server中插入違規記錄

Insert into @Table 
(c1,c2,c3,c4,c5) 
Values 
(1,2,3,4,5), 
(2,2,3,4,5), 
(3,2,3,4,5), 
(4,2,3,4,5), 
(5,2,3,4,5) 
.... 
.... 
Up to 1000 rows 

當我嘗試執行它。我得到了一個外國密鑰違規。我知道原因,因爲其中一個價值並不存在於其相應的父表中。

導致此違規的記錄很少。在1000行中很難找到違規的行,所以我想至少將有效的記錄插入到我的目標表中,而不是違規的行,就像現在一樣。

我不知道如何執行此操作。請給我建議任何想法來做到這一點。

+0

哪列有外鍵 –

+2

只是在插入之前過濾記錄,而不是你父表的一部分 –

回答

0

如果這是一個一次性的事情,那麼你就可以做到以下幾點:

降FK約束

ALTER TABLE MyTAble 
    DROP CONSTRAINT FK_Contstraint 
GO 

執行INSERT

查找沒有匹配的父ID的記錄。

SELECT * FROM MyTable MT WHERE NOT EXISTS (SELECT 1 FROM ParentTable PT WHERE MT.ParentId = PT.ID) 

刪除這些記錄或與他們做別的事情。

重新創建FK約束。

+0

'insert into table ... SELECT * FROM MyTable MT WHERE EXISTS(SELECT 1 FROM ParentTable PT WHERE MT.ParentId = PT .ID)'這一個將節省重新執行的四個步驟 –

+0

感謝marko – StackUser

0

禁用外鍵或修復您的數據。

查找不良數據很簡單 - 您可以將其臨時插入緩衝區表並運行查詢以查找相關表中缺少哪些數據。

相關問題