Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Sql Server 2008 MERGE - il modo migliore per ottenere conteggi

È possibile specificare una clausola OUTPUT sull'istruzione MERGE e ottenere un report di output di ciò che è stato fatto durante 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'
;

Questo ti darà una riga per ogni "azione" (inserisci, aggiorna, elimina) per ogni operazione. Se ci sono molte istruzioni, puoi anche USCIRE IN @tableVar e quindi guardare la variabile della tabella.

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

Consulta la documentazione in linea per i dettagli su MERGE dichiarazione e la clausola OUTPUT .

Marco