首页 > 解决方案 > T-SQL MERGE with condition 什么不匹配?

问题描述

假设我进行了与类似条件匹配的合并

MERGE TargetTable WITH(HOLDLOCK) AS target
USING SourceTable AS source
ON (target.ID = source.ID)
WHEN MATCHED AND (source.BitCondition = 0) THEN
    UPDATE TargetTable
WHEN NOT MATCHED -- what is not matched??
    INSERT INTO TargetTable

不匹配的只是记录不在两个表中还是像

NOT(MATCHED AND (source.BitCondition = 0))

注意我故意想忽略它匹配并且 BitCondition = 1 的情况

标签: sqlsql-servertsql

解决方案


NOT MATCHED根据MERGE 文档的默认值是NOT MATCHED BY TARGET,这意味着该行存在于源中但不存在于MERGE.

为避免插入不匹配的行source.BitCondition = 1,您可以添加AND条件:

WHEN NOT MATCHED BY TARGET AND (source.BitCondition = 0) THEN
    INSERT INTO TargetTable

推荐阅读