Solo oggi scopro l’esistenza, l’utilizzo e la potenza del comando OUTPUT introdotto in SQL Server 2005.
Permette di dire a SQL cosa farci restituire di una data operazione. Mi spiego meglio.
Supponiamo di fare la delete di alcune tuple di una tabella (Tab) secondo un dato criterio (campoC > 7) e voler sapere quali record siano stati eliminati. Abbiamo due possibilità: fare prima una select e dopo la delete, il tutto dentro una transazione, oppure definire un trigger sulla delete così da intercettare le tuple eliminate.
Sfruttando invece il comando OUTPUT possiamo risolvere in maniera più elengante scrivendo un codice come questo:
DELETE FROM Tab
OUTPUT Deleted.CampoA, Deleted.CampoB, Deleted.CampoC
WHERE CampoC > 7
Come si nota si sfrutta la tabella Deleted proprio come si farebbe in un trigger. Analogamente per operazioni di insert si sfrutta la tabella Inserted e per operazioni di update si sfrutta Deleted per la tupla pre-aggiornamento e Inserted per quella post-aggiornamento.
Per una spiegazione più chiara e meticolosa vi rimando a:
OUTPUT Clause (Transact-SQL)
The OUPUT Command
OUTPUT Clause in SQL Server 2005
sql, SQL Server 2005, command, microsoft