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

时间:2014-09-29 09:31:58

标签: sql sql-server tsql 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'

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

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

1 个答案:

答案 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;

相关问题