-2

我使用以下代码将记录从一个表更新或插入到另一个表,但重复记录时插入语句不会跳过。我怎样才能绕过它?

我收到以下错误。我想跳过重复记录并插入新的

消息 2627,级别 14,状态 1,第 6 行违反主键约束“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)在源代码中有相同的集合,但有两个不同的PartID.

此外,在INSERTed您指定的列中,没有bomRev,bomItem.
这些列是否有默认约束?他们会保证唯一性吗?

于 2016-06-26T06:56:50.650 回答