È possibile specificare una clausola OUTPUT sull'istruzione MERGE e ottenere un rapporto di output su cosa è 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, cancella) per ogni operazione. Se ci sono molte dichiarazioni, potresti anche USCITE IN @tableVar e poi guarda la variabile di 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
Partenza documentazione in linea per i dettagli sulla MERGE dichiarazione e la OUTPUT clause.
Marc
fonte
2009-08-12 20:33:27
È possibile farlo in qualche modo in una dichiarazione, possibilmente con un gruppo? in modo che il bit di output sia qualcosa di simile a> OUTPUT $ ACTION, COUNT (1) GROUP BY $ ACTION? – eidylon
No, non puoi farlo. È possibile utilizzare solo OUTPUT nella finestra di output SSMS o in una variabile di tabella - non allungare eccessivamente la clausola OUTPUT !! :-) –
Ah bene ... In realtà, OUTPUT ha messo fuori una variabile di tabella o un set di risultati? Sarebbe possibile racchiudere l'istruzione MERGE con una clausola OUTPUT all'interno di un'istruzione SELECT come origine (come sottoquery) e quindi avere SELECT esterno che fa l'aggregazione? ... Sembra possibile. Potrei dover giocare con quello. – eidylon