-2

次のコードを使用して、あるテーブルから別のテーブルにレコードを更新または挿入しましたが、レコードが重複している場合、insert ステートメントはスキップしません。どうすればそれをバイパスできますか?

次のエラーが表示されます。重複レコードをスキップして新しいレコードを挿入したい

メッセージ 2627、レベル 14、状態 1、行 6 PRIMARY KEY 制約 'PK_MIBOMD_KEY_0' の違反。オブジェクト 'dbo.MIBOMD' に重複するキーを挿入できません。重複キーの値は ( , 0, 1) です。ステートメントは終了されました。

MERGE [MIBOMD] AS TARGET
USING [whl] AS SOURCE 


ON (TARGET.[bomItem] = SOURCE.ItemID AND TARGET.bomEntry = SOURCE.bomEntry AND TARGET.bomRev = SOURCE.rev)

WHEN MATCHED AND TARGET.bomEntry = SOURCE.bomEntry 
AND TARGET.partId <> SOURCE.partid THEN 
UPDATE SET TARGET.partId = SOURCE.partid

WHEN NOT MATCHED BY TARGET THEN 
INSERT (partId,bomEntry, srcLoc, qty, lead) 
VALUES (SOURCE.partid, SOURCE.bomEntry, 'R14SDS', SOURCE.qty, SOURCE.lead);
4

1 に答える 1

1

あなたが述べたように、ソースの一意性はによって保証されていItemID + PartIDます。一方、あなたは source でマッチングしています(ItemID,bomEntry,rev)=target.(bomItem,bomEntry,bomRev)

(ItemID,bomEntry,rev)ソースに同じセットの が含まれていても、2 つの異なる が含まれている可能性は十分にありますPartID

また、INSERTed指定した列には がありませんbomRev,bomItem
それらの列にデフォルトの制約はありますか? それらは一意性を保証しますか?

于 2016-06-26T06:56:50.650 に答える