Trigger

mercoledì 14 gennaio 2009 - 13.25

tankian Profilo | Junior Member

Ciao, devo creare un trigger che all'evento delete di una tab copi i dati cancellati in un'altra.

Ho subito pensato stupidamente a questo:

CREATE TRIGGER tr_
on DB.dbo.TABLE1
FOR DELETE
AS
insert into DB.dbo.TABLE2
SELECT * FROM DB.dbo.TABLE

ma ovviamente questo trigger copia i dati da 'TABLE1' a 'TABLE2' dopo l'evento DELETE e quindi dopo averli cancellati, e ovviamente non copia nulla.

Ho pensato che potrei creare una tabella di supporto che si riempie contemporaneamente alla TABLE1 e, all'evento DELETE di TABLE1, copio i dati dalla tabella di supporto alla TABLE2.

Ma non ci sono metodi più 'professionali'?Suggerimenti?

Grazie in anticipo!

lbenaglia Profilo | Guru

>Ciao, devo creare un trigger che all'evento delete di una tab
>copi i dati cancellati in un'altra.
>
>Ho subito pensato stupidamente a questo:
>
>CREATE TRIGGER tr_
>on DB.dbo.TABLE1
>FOR DELETE
>AS
>insert into DB.dbo.TABLE2
>SELECT * FROM DB.dbo.TABLE
>
>ma ovviamente questo trigger copia i dati da 'TABLE1' a 'TABLE2'
>dopo l'evento DELETE e quindi dopo averli cancellati, e ovviamente
>non copia nulla.

Ciao Stefano,

Se utilizzi SQL Server, nel body del trigger puoi referenziare la tabella virtuale DELETED che conterrà tutte le righe eliminate dalla tabella originaria:

CREATE TRIGGER dbo.trD_Logga ON dbo.TABLE1 FOR DELETE AS INSERT dbo.TABLE2 SELECT * FROM DELETED;

>Grazie in anticipo!
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

tankian Profilo | Junior Member

Grandissimo grazie!

Una domandina però! La tabella virtuale DELETED immagazzina tutti i dati cancellati che fanno riferimento al trigger? o per un certo periodo di tempo? o cos'altro?

Ciao!

lbenaglia Profilo | Guru

>Una domandina però! La tabella virtuale DELETED immagazzina tutti
>i dati cancellati che fanno riferimento al trigger?
No, la tabella virtuale DELETED conterrà le righe eliminate dalla tabella sulla quale è stato definito il trigger di DELETE (o UPDATE) nella transazione in corso.

>o per un certo periodo di tempo? o cos'altro?
No, solo della transazione in corso che verrà conclusa (commit o rollback) all'uscita dal trigger.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5