Pagine

giovedì 15 settembre 2011

Utilizzo delle tabelle inserted e deleted

Le tabelle inserted e deleted sono estremamente utili perchè consentono, anche all'esterno dei trigger, di reperire i dati che abbiamo modificato, inserito o eliminato.....



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