Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server TSQL合并:<;不匹配时>;不';不要跳过重复_Sql Server_Database_Tsql_Merge Statement - Fatal编程技术网

Sql server TSQL合并:<;不匹配时>;不';不要跳过重复

Sql server TSQL合并:<;不匹配时>;不';不要跳过重复,sql-server,database,tsql,merge-statement,Sql Server,Database,Tsql,Merge Statement,我使用以下代码从一个表到另一个表更新或插入记录,但当复制记录时,Insert语句不会跳过。我怎么能绕过它 我得到以下错误。我想跳过重复记录并插入新记录 Msg 2627,14级,状态1,第6行违反主键 约束“PK_MIBOMD_KEY_0”。无法在对象中插入重复的键 “dbo.MIBOMD”。重复的键值为(,0,1)。该声明已经发布 已经终止 MERGE[MIBOMD]作为目标 使用[whl]作为源 ON(TARGET.[bomItem]=SOURCE.ItemID和TARGET.bomEntr

我使用以下代码从一个表到另一个表更新或插入记录,但当复制记录时,Insert语句不会跳过。我怎么能绕过它

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

Msg 2627,14级,状态1,第6行违反主键 约束“PK_MIBOMD_KEY_0”。无法在对象中插入重复的键 “dbo.MIBOMD”。重复的键值为(,0,1)。该声明已经发布 已经终止

MERGE[MIBOMD]作为目标
使用[whl]作为源
ON(TARGET.[bomItem]=SOURCE.ItemID和TARGET.bomEntry=SOURCE.bomEntry和TARGET.bomRev=SOURCE.rev)
当匹配且TARGET.bomEntry=SOURCE.bomEntry时
然后是TARGET.partId SOURCE.partId
更新集TARGET.partId=SOURCE.partId
当目标不匹配时
插入(零件号、bomEntry、srcLoc、数量、铅)
值(SOURCE.partid、SOURCE.bomEntry、“R14SDS”、SOURCE.qty、SOURCE.lead);

如您所述,源代码中的唯一性由
ItemID+PartID
保证。 同时,您正在按源
(ItemID,bomEntry,rev)=目标进行匹配。(bomItem,bomEntry,bomRev)

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

此外,在您指定的
插入的
列中,没有
bomRev、bomItem


这些列上是否有默认约束?它们会保证唯一性吗?

您确定您的源代码(
[whl]
)没有重复项吗?@tarheel否,因为
[whl]
上的主键是
项目ID
部分ID
。只有多个或重复的
Item ID
s,但是
Item ID+零件ID
是unique@tarheel否,因为[whl]上的主键是ItemID和PartID。只有多个或重复的项目ID,但项目ID+零件ID是唯一的。您可以在问题中添加一些示例数据吗?从您的代码或描述中不清楚问题出在哪里…@M.Ali我在问题的底部添加了两幅图像。
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);