Discussione:
Uso dei trigger
(troppo vecchio per rispondere)
Antonio Budano
2006-02-09 15:45:16 UTC
Permalink
Ciao,

Devo modificare una mia applicazione aggiungendo su alcune tabelle la
scrittura di un file di log tenendo traccia dei valori modificati.

per fare cio', ho pensato di utilizzar i trigger AFTER INSERT, AFTER DELETE,
AFTER UPDATE.

Prima di partire per questa avventura, vorrei avere qualche conferma sui
test che ho fatto, specie nell'uso delle tabelle INSERTED e DELETED
disponibili nei trigger.

1. Le tabelle INSERTED e DELETED contengono un solo record, quindi per
leggere i dati e' suffiecente fare SELECT MyField from INSERTED senza WHERE,
corretto?

2. In fase di UPDATE, la tabella INSERTED contiene i nuovi valori, mentre la
tabella DELETED contiene i valori prima dell'aggiornamento, corretto?

3. In fase di INSERT devo usare la tabella INSERTED mentre in fase di DELETE
uso la DELETED (domanda ovvia, ma chi domanda non commette errori...),
corretto?

Qualche altro suggerimento/raccomandazione nell'uso dei trigger?

Grazie
Antonio
Lorenzo Benaglia
2006-02-09 15:55:54 UTC
Permalink
Post by Antonio Budano
1. Le tabelle INSERTED e DELETED contengono un solo record, quindi per
leggere i dati e' suffiecente fare SELECT MyField from INSERTED senza
WHERE, corretto?
No, contengono tutte le righe inserite ed eliminate dalle query.
Supponiamo di avere definito un trigger di INSERT sulla tabella
dbo.Destinazione

INSERT dbo.Destinazione
SELECT *
FROM dbo.Origine

Se esegui questa query la tabella INSERTED verrà popolata con tutte le righe
presenti nella tabella dbo.Origine.
Post by Antonio Budano
2. In fase di UPDATE, la tabella INSERTED contiene i nuovi valori,
mentre la tabella DELETED contiene i valori prima dell'aggiornamento,
corretto?
Corretto.
Post by Antonio Budano
3. In fase di INSERT devo usare la tabella INSERTED mentre in fase di
DELETE uso la DELETED (domanda ovvia, ma chi domanda non commette
errori...), corretto?
Corretto.
Post by Antonio Budano
Qualche altro suggerimento/raccomandazione nell'uso dei trigger?
Si, non puoi fare quello che ti sei prefissato, ovvero scrivere su file :-D
Piuttosto popola una tabella di log che tenga traccia delle righe inserite
ed eliminate ed all'occorrenza esporta con BCP o un DTS il suo contenuto su
file.
Post by Antonio Budano
Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://italy.mvps.org
Antonio Budano
2006-02-09 16:15:27 UTC
Permalink
Ciao Lorenzo,
Post by Lorenzo Benaglia
Si, non puoi fare quello che ti sei prefissato, ovvero scrivere su file :-D
Piuttosto popola una tabella di log che tenga traccia delle righe inserite
ed eliminate ed all'occorrenza esporta con BCP o un DTS il suo contenuto su
file.
In effetti il mio log è una tabella di log che verrà successivamente
archiviata/cancellata ;-D.

Ciao
Antonio
Marcello
2006-02-09 15:56:32 UTC
Permalink
Post by Antonio Budano
Ciao,
Ciao,
Post by Antonio Budano
Devo modificare una mia applicazione aggiungendo su alcune tabelle la
scrittura di un file di log tenendo traccia dei valori modificati.
per fare cio', ho pensato di utilizzar i trigger AFTER INSERT, AFTER DELETE,
AFTER UPDATE.
Prima di partire per questa avventura, vorrei avere qualche conferma sui
test che ho fatto, specie nell'uso delle tabelle INSERTED e DELETED
disponibili nei trigger.
1. Le tabelle INSERTED e DELETED contengono un solo record, quindi per
leggere i dati e' suffiecente fare SELECT MyField from INSERTED senza WHERE,
corretto?
No, :-(
Le tabelle inserted e deleted contengono tutti i records coinvolti
nell'operazione [pensa un "insert ... from" o un update senza where]
Post by Antonio Budano
2. In fase di UPDATE, la tabella INSERTED contiene i nuovi valori, mentre la
tabella DELETED contiene i valori prima dell'aggiornamento, corretto?
Si
Post by Antonio Budano
3. In fase di INSERT devo usare la tabella INSERTED mentre in fase di DELETE
uso la DELETED (domanda ovvia, ma chi domanda non commette errori...),
corretto?
Si
Post by Antonio Budano
Qualche altro suggerimento/raccomandazione nell'uso dei trigger?
Sono pesanti, non abusarne. :-D
Post by Antonio Budano
Grazie
Antonio
marc.
--
marcello poletti
www.epomops.it
http://blogs.dotnethell.it/epomops
Antonio Budano
2006-02-09 16:24:30 UTC
Permalink
Ciao Marcello,
Post by Marcello
Post by Antonio Budano
Qualche altro suggerimento/raccomandazione nell'uso dei trigger?
Sono pesanti, non abusarne. :-D
Meglio inserire tutto nelle CRUD StoredProcedures? Così facendo mi si
complicano un pò :-D.
Usando i trigger il codice viene molto più pulito, in quanto ci sono anche
SP per funzioni di copia e tabelle legate tramite GUID.

Sono circa 150 tabelle da tracciare x 3 trigger = 450, e' un po tantino?

Ciao
Antonio
Marcello
2006-02-09 16:30:45 UTC
Permalink
Post by Antonio Budano
Meglio inserire tutto nelle CRUD StoredProcedures? Così facendo mi si
complicano un pò :-D.
Ciao,
si, io passerei dalle stored. Senza ripetere tutto il codice
naturalmente, ma una semplice

exec p_Log @IDIn questione, altreinformazioni

alla fine delle stored che desideri loggare, ma si tratta esclusivamente
del mio gusto personale.
Post by Antonio Budano
Usando i trigger il codice viene molto più pulito, in quanto ci sono anche
SP per funzioni di copia e tabelle legate tramite GUID.
Capisco, ma non ho mai avuto simpatia per i trigger...
Post by Antonio Budano
Sono circa 150 tabelle da tracciare x 3 trigger = 450, e' un po tantino?
Dal mio punto di vista sono tantissimi e non lo farei mai, ma è molto
questione di gusti.
Post by Antonio Budano
Ciao
Antonio
Ciao, marc.
--
marcello poletti
www.epomops.it
http://blogs.dotnethell.it/epomops
Continua a leggere su narkive:
Loading...