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等于特定的常量字符串.
是的,请参阅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>中引用目标表中的列.
归档时间: |
|
查看次数: |
8497 次 |
最近记录: |