Как добавить условие 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. В можно ссылаться только на столбцы из целевой таблицы .