2017-07-22 46 views
0

データベースに新しいデータをロードするか、既存のデータを更新する更新スクリプトがあります。しかし、私はこれらのエラーを取得します。FOREIGN KEY制約とのMERGEの競合

The MERGE statement conflicted with the FOREIGN KEY constraint 
"FK_JW_MaterialData2PL_cMat_MaterialText". 
The conflict occurred in database "TEST", table "dbo.JW_MaterialData", column 'camosGUID'. 

The MERGE statement conflicted with the FOREIGN KEY constraint 
"FK_JW_MaterialData_cMat_Material". The conflict occurred in 
database "TEST", table "dbo.cMat_Material", column 'camosGUID'. 

この関連する文です。もちろん、より多くのテーブルを持つMERGEステートメントがたくさんあります。

MERGE INTO [dbo].[JW_MaterialData2PL] ON camosGUID 
WHEN MATCHED THEN UPDATE SET 
WHEN NOT MATCHED THEN INSERT 

MERGE INTO [dbo].[cMat_Material] ON camosGUID 
WHEN MATCHED THEN UPDATE SET 
WHEN NOT MATCHED THEN INSERT 

MERGE INTO [dbo].[JW_MaterialData] ON camosGUID 
WHEN MATCHED THEN UPDATE SET 
WHEN NOT MATCHED THEN INSERT 

FK_JW_MaterialData2PL_cMat_MaterialTextFK_JW_MaterialData_cMat_MaterialON UPDATE CASCADEON DELETE CASCADEに設定されています。

おそらくこれは私がMERGE声明を書いた注文の問題ですか?それとも、何が原因なのか知っていますか?

もう1つの質問:スクリプトを再実行すると、エラーは発生しません。ですから、sciptを2回実行するか、これが将来問題を引き起こす可能性がありますか?

+1

注文の依存関係に基づいて、あなたの 'merge'文。例えば'cMat_Material'はあなたのエラーメッセージに基づいて' JW_MaterialData'の後になければなりません。 – SqlZim

+0

はい、私は正しい順序が問題を解決したと思います。 'cMat_Material'>' JW_MaterialData'> 'cMat_PriceList'>' JW_MaterialData2PL'です。 – user1673665

答えて

0

MERGEステートメントは、テーブルの依存関係を見て正しい順序で配置する必要がありました。

  1. cMat_Material
  2. JW_MaterialData
  3. JW_MaterialData2PL
関連する問題