T-SQL MERGE 与条件什么不匹配?

M. *_*hmy 6 sql t-sql sql-server

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

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
Run Code Online (Sandbox Code Playgroud)

不匹配的记录是不在两个表中还是类似

NOT(MATCHED AND (source.BitCondition = 0))
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*man 7

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
Run Code Online (Sandbox Code Playgroud)