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'
我正在使用上面的合并声明删除DestinationTable中的记录(如果已从源中删除)
是否有人知道如何将一个WHERE条件添加到Delete语句?我想只从目的地删除,其中ColA等于特定的常量字符串。
答案 0 :(得分:5)
是的,请参阅MERGE
的{{3}}。
[ 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&lt; clause_search_condition&gt;条款。对于任何给定的 行,第二个WHEN NOT MATCHED BY SOURCE子句仅适用于 第一个不是。如果有两个不符合SOURCE条款, 然后必须指定UPDATE操作,并且必须指定DELETE 行动。 只能引用目标表中的列 &LT; clause_search_condition&gt; 。