如何为删除的SQL Server Merge语句添加where条件

Sta*_*ace 3 sql t-sql sql-server merge-statement

MERGE  DestinationTable AS D 
USING @SourceTable AS S
ON D.Alternate_ID = S._ID

WHEN MATCHED AND
(
       D.Candidate_ID <> S.Candidate_ID  OR  ISNULL(D.Vacancy_ID,'') <> S.Vacancy_ID   
)
THEN
UPDATE SET  
    D.FName = S.FName,
    D.Department = S.Department,

WHEN NOT MATCHED BY TARGET
THEN INSERT  
(
    Alternate_ID,
    FName,
    Department
 ) 
  VALUES 
  (
    S.ID,
    S.FName,
    S.Department  
  ) 
 WHEN NOT MATCHED BY SOURCE
 --How to add a where clause to the delete statement here
 THEN  DELETE; --E.g WHERE  D.Department <> 'HR'
Run Code Online (Sandbox Code Playgroud)

我正在使用上面的合并声明删除DestinationTable中的记录,如果它们已从源中删除

有没有人知道如何将一个WHERE条件添加到Delete语句?我想只从目标中删除,其中ColA等于特定的常量字符串.

Tay*_*nan 8

是的,请参阅MSDN文章MERGE.

[ WHEN NOT MATCHED BY SOURCE [ AND <clause_search_condition> ]
    THEN <merge_matched> ] [ ...n ]
Run Code Online (Sandbox Code Playgroud)

以下是应用于NOT MATCHED BY SOURCE查询部分的文档(假设CoIA是目标表中的列):

...
WHEN NOT MATCHED BY SOURCE AND D.CoIA = 'YourValue' THEN
DELETE;
Run Code Online (Sandbox Code Playgroud)

但是,请务必注意以下事项:

MERGE语句最多可以有两个WHEN NOT MATCHED BY SOURCE子句.如果指定了两个子句,则第一个子句必须伴随AND <clause_search_condition>子句.对于任何给定的行,仅当第一个不是时,才应用第二个WHEN NOT MATCHED BY SOURCE子句.如果有两个WHEN NOT MATCHED BY SOURCE子句,则必须指定UPDATE操作,并且必须指定DELETE操作.只能在<clause_search_condition>中引用目标表中的列.