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等于特定常量字符串的目标中删除。
最佳答案
是的,请参阅MERGE
的MSDN 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
行动。只能引用目标表中的列
。