Как добавить условие where в оператор SQL Server Merge для удалений

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 ответ

Решение

Да, см. Статью MSDN для MERGE,

[ 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 может содержать не более двух предложений WHEN NOT MATCHED BY SOURCE. Если указаны два предложения, то первое предложение должно сопровождаться предложением AND . Для любой данной строки второе предложение WHEN NOT MATCHED BY SOURCE применяется только в том случае, если первое - нет. Если существует два предложения WHEN NOT MATCHED BY SOURCE, то необходимо указать действие UPDATE, а другое - действие DELETE. В можно ссылаться только на столбцы из целевой таблицы.

Другие вопросы по тегам