2016-04-30 52 views
0

データを2つのテーブルを比較して1つのテーブルから別のテーブルに挿入する次のSQLコードがあります。宛先テーブルのPKは[bomItem], [bomRev], [bomEntry]です。1つのテーブルから別のテーブルにデータを挿入するステートメントを挿入

挿入したい場合はItemID in source table = bomItem field in Dest. table[rev](field in Source tbl)NOT=[bomRev](in destination tbl)です。私は次のエラー

メッセージ547、レベル16、状態0、ライン46 にFOREIGN KEY制約 "FK_MIBOMD_MIBOMH" と競合INSERT文を取得するスクリプトを実行しようとした

。競合はデータベース "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'が含まれています。たぶん、これらの2つの間(親/子)の間に1対多のテーブル関係があり、子IDにNULLを接続したまま子レコードにレコードを追加している可能性があります。 – Parfait

+0

@パルフェットありがとう!はい、私は1対多の関係を持っており、私は親と子で同じデータ/レコードを持っていますが、唯一の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" 
関連する問題