Вы можете указать предложение OUTPUT в своем заявлении MERGE и получить выходной отчет о том, что было сделано во время MERGE.
MERGE (targetTable) AS t
USING (sourceTable) AS s
ON t.ID = s.ID
WHEN MATCHED THEN
(some statements)
WHEN NOT MATCHED THEN
(some statements)
OUTPUT
$action, inserted.ID 'inserted', deleted.ID 'deleted'
;
Это даст вам строку для каждого «действия» (вставить, обновить, удалить) для каждой операции. Если много операторов, вы также можете ВЫХОДИТЬ В @tableVar, а затем посмотреть на переменную таблицы.
DECLARE @tableVar TABLE (MergeAction VARCHAR(20), InsertedID INT, DeletedID INT)
MERGE (targetTable) AS t
USING (sourceTable) AS s
ON t.ID = s.ID
WHEN MATCHED THEN
(some statements)
WHEN NOT MATCHED THEN
(some statements)
OUTPUT
$action, inserted.ID 'inserted', deleted.ID 'deleted' INTO @tableVar
;
SELECT MergeAction, COUNT(*)
FROM @tableVar
GROUP BY MergeAction
Отъезд в Books Online подробно о MERGE заявления и OUTPUT clause.
Марк
Возможно ли это как-то сделать в одном утверждении, возможно, с группой? так что выходной бит будет чем-то вроде строк> OUTPUT $ ACTION, COUNT (1) GROUP BY $ ACTION? – eidylon
Нет, вы не можете этого сделать. Вы можете либо вывести OUTPUT в окно вывода SSMS, либо в переменную таблицы - не перетягивать предложение OUTPUT !! :-) –
А хорошо ... На самом деле, OUTPUT выдает переменную таблицы или набор результатов? Можно ли обернуть оператор MERGE с помощью предложения OUTPUT внутри оператора SELECT в качестве источника (в качестве подзапроса), а затем, чтобы внешний SELECT выполнял агрегацию? ... Звучит возможно. Мне, возможно, придется поиграть с этим. – eidylon