我使用以下代码更新或将记录从一个表更新到另一个表,但插入语句在重复记录时不会跳过。我怎么能绕过那个?
我收到以下错误。我想跳过重复记录并插入新的
Ms 2627,Level 14,State 1,Line 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);
答案 0 :(得分:1)
如您所述,来源的唯一性由ItemID + PartID
保证。
同时,您按来源(ItemID,bomEntry,rev)=target.(bomItem,bomEntry,bomRev)
进行匹配。
完全有可能你会在源代码中使用同一组(ItemID,bomEntry,rev)
但有两个不同的PartID
。
此外,在您指定的INSERTed
列中,没有bomRev,bomItem
。
这些列是否有默认约束?他们会保证独特吗?