Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Sql Server 2008 MERGE - meilleur moyen d'obtenir des comptes

Vous pouvez spécifier une clause OUTPUT dans votre instruction MERGE et obtenir un rapport de sortie de ce qui a été fait pendant 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'
;

Cela vous donnera une ligne pour chaque "action" (insertion, mise à jour, suppression) pour chaque opération. S'il y a beaucoup d'instructions, vous pouvez également OUTPUT INTO @tableVar puis regarder la variable de table.

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

Consultez la documentation en ligne pour plus de détails sur la MERGE et la clause OUTPUT .

Marc