Immaginate di avere una tabella come questa :
use tempdb go create table importDati ( idRecord int primary key identity(1,1), valore int ) go
Il campo id record è un intero autoincrementate (int identity(1,1)), quindi le istruzioni di Insert non potranno specificarlo, ci pensa l'engine a valorizzarlo.
Ora vogliamo popolare la tabella e visualizzarne il contenuto:
insert importDati (valore) values (11), (22), (33), (44), (55), (66)
Guardiamo il contenuto della tabella
select idRecord,valore from importDati
Il campo id record della tabella importDati è valorizzato correttamente.....
A questo punto vogliamo conoscere gli idrecord delle righe che da ora in poi andremo ad inserire. Come possiamo fare ? Semplicemente usando la tabella "virtuale" inserted.
Guardate il codice seguente, creo una tabella temporanea per salvare i dati risultanti (avrei potuto anche utilizzare una variabile di tipo table)
create table #t (idRecord int,valore int ) go
Inserisco le nuove righe nella tabella importDati , ma attenzione alla clausola output che inserisce la riga appena creata anche nella tabella temporanea #t con il valore idrecord creato dall'engine:
insert importDati (valore) output inserted.idRecord,inserted.valore into #t values(77),(88),(99),(10),(11)
Guardiamo cosa contiene la tabella temporanea
select * from #t
Conterrà le righe inserite compreso il valore generato dall'engine per il campo idrecord.
Ora ripuliamo il TempDB
drop table #t drop table importDati
La tabella deleted funziona esattamente come la inserted, solo che è disponibile per le istruzioni di delete dei dati.
Facile no ?
Nessun commento:
Posta un commento