Я использовал операцию MERGE в SQL Server 2008, но теперь столкнулся с похожим сценарием, где мне нужно такое же поведение "обнаружения" (WHEN MATCHED
, WHEN NOT MATCHED BY SOURCE
, WHEN NOT MATCHED BY TARGET
), но я хочу, чтобы результирующие операции выполнялись в разных таблицах, а не в источнике или цели.
Другими словами, у меня есть два набора результатов, beforeTable
и afterTable
, и я хочу сделатьчто-то вроде:
MERGE afterTable AS dest
USING beforeTable AS source
ON (dest.ID = source.ID)
WHEN MATCHED THEN
--INSERT tblModifiedItems (ID) VALUES (ID)
WHEN NOT MATCHED BY TARGET THEN
--INSERT tblRemovedItems (ID) VALUES (ID)
WHEN NOT MATCHED BY SOURCE THEN
--INSERT tblAddedItems (ID) VALUES (ID)
В настоящее время я делаю это с тремя отдельными (хотя и очень простыми) запросами по двум таблицам, но подход MERGE позволил бы сделать это как одну операцию.Я просто не могу понять, можно ли использовать его для таргетинга на другие таблицы, отличные от двух сравниваемых.
Возможно ли это, и если да, то как?
[EDIT]
Причина, по которой я хочу это сделать, не связана с проблемами атомарности ВСТАВКИ в добавление / удаление / изменение (все это уже в транзакции).Это потому, что я хочу иметь возможность генерировать три набора данных в одном запросе или, по крайней мере, в одном операторе , что также делает цель очень ясной.