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'


我正在使用上面的Merge语句删除DestinationTable中的记录(如果它们已从源中删除)

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

最佳答案

是的,请参阅MERGEMSDN article

[ WHEN NOT MATCHED BY SOURCE [ AND <clause_search_condition> ]
    THEN <merge_matched> ] [ ...n ]


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

...
WHEN NOT MATCHED BY SOURCE AND D.CoIA = 'YourValue' THEN
DELETE;


但是,请务必注意以下几点:


未按源匹配时,MERGE语句最多可以有两个
条款。如果指定了两个子句,则第一个子句必须为
并带有AND 子句。对于任何给定
行,仅在以下情况下应用第二个WHEN NOT MATCHED BY SOURCE子句
第一个不是。如果有两个WHEN NOT MATCHED BY SOURCE子句,
那么必须指定一个UPDATE动作,然后必须指定一个DELETE
行动。只能引用目标表中的列

07-24 09:45
查看更多