TSQL合并:<when not =“”matched =“”>不跳过重复

时间:2016-06-26 01:28:26

标签: sql-server database tsql merge-statement

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

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

  

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);

1 个答案:

答案 0 :(得分:1)

如您所述,来源的唯一性由ItemID + PartID保证。 同时,您按来源(ItemID,bomEntry,rev)=target.(bomItem,bomEntry,bomRev)进行匹配。

完全有可能你会在源代码中使用同一组(ItemID,bomEntry,rev)但有两个不同的PartID

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