Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Sql Server 2008 MERGE - melhor maneira de obter contagens


Você pode especificar uma cláusula OUTPUT em sua instrução MERGE e obter um relatório de saída do que foi feito durante o 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'
;

Isso lhe dará uma linha para cada "ação" (inserir, atualizar, excluir) para cada operação. Se for um monte de instruções, você também pode OUTPUT INTO @tableVar e então olhar para a variável da tabela.
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

Confira os Manuais Online para obter detalhes sobre o MERGE e a cláusula OUTPUT .

Marco