CLR Trigger - Quando Sono Richiamati?

venerdì 29 febbraio 2008 - 11.30

lolic Profilo | Newbie

Sto implementando dei Trigger in C# ma non riesco a trovare un'indicazione di quando il Trigger è invocato.
E' possibile ad esempio utilizzare nell'attribute SqlTrigger le espressioni After - Before? Se sì come?

Nel caso in cui il trigger è invocato dopo l'evento di Insert,Update,Delete se io eseguo una query nella medesima tabella a cui è associato il trigger i dati, esito della query, sono aggiornati?

Ringrazio Anticipatamente

lbenaglia Profilo | Guru

>Sto implementando dei Trigger in C# ma non riesco a trovare un'indicazione
>di quando il Trigger è invocato.
>E' possibile ad esempio utilizzare nell'attribute SqlTrigger
>le espressioni After - Before? Se sì come?

Ciao Andrea,

Prima di tutto l'invocazione del trigger è determinata dagli eventi che specifichi nel comando CREATE TRIGGER.
Nel corpo del trigger in C# puoi determinare quale operazione l'ha scatenato, interrogando la proprietà TriggerAction dell'oggetto SqlContext:
http://msdn2.microsoft.com/it-it/library/ms189799.aspx
http://technet.microsoft.com/it-it/library/ms131093.aspx

>Ringrazio Anticipatamente
Prego.

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

lolic Profilo | Newbie

>>Sto implementando dei Trigger in C# ma non riesco a trovare un'indicazione
>>di quando il Trigger è invocato.
>>E' possibile ad esempio utilizzare nell'attribute SqlTrigger
>>le espressioni After - Before? Se sì come?
>
>Ciao Andrea,
>
>Prima di tutto l'invocazione del trigger è determinata dagli
>eventi che specifichi nel comando CREATE TRIGGER.

E questo viene indicato nell'attribute indicando Event = :
[Microsoft.SqlServer.Server.SqlTrigger(Name = "Trigger", Target = "Table", Event = "FOR INSERT,UPDATE")]

>Nel corpo del trigger in C# puoi determinare quale operazione
>l'ha scatenato, interrogando la proprietà TriggerAction dell'oggetto
>SqlContext:
Quindi verifico se Insert,Update, Delete oltre a tutte le altre tipologie di Action
>http://msdn2.microsoft.com/it-it/library/ms189799.aspx
Nel sito è indicato quanto segue:

FOR | AFTER
AFTER specifica che il trigger viene attivato solo al termine dell'esecuzione di tutte le operazioni specificate nell'istruzione di trigger SQL. Affinché il trigger venga attivato, è inoltre necessario che siano stati completati tutti i controlli dei vincoli e le operazioni referenziali di propagazione.

AFTER è il tipo di trigger predefinito quando FOR è l'unica parola chiave specificata.

Non è possibile definire trigger AFTER per le viste.

Dalla quale però non capisco come devo usarlo, nel seguente modo?:

[Microsoft.SqlServer.Server.SqlTrigger(Name = "Trigger", Target = "Table", Event = "AFTER INSERT,UPDATE")]
se invece metto Event = "FOR INSERT,UPDATE" il trigger è chiamato prima dell'evento specificato, nel caso di Inserimento o Modifica ?


Quello che ancora non capisco è dunque come specificare quando vi è l'invocazione del metodo che definisce il trigger e come indicare il quando.
Se ho il trigger: public static void TiggerDiEsempio()
e specifico nell'attribute del metodo: Event = "FOR UPDATE"
Il codice verrà eseguito prima dell'esecuzione dell'UPDATE o dopo l'esecuzione dell'UPDATE?

Mi scuso ma come è scritto nel sito non mi aiuta a comprendere.

>http://technet.microsoft.com/it-it/library/ms131093.aspx
>
>>Ringrazio Anticipatamente
>Prego.
>
>Ciao!
>--
>Lorenzo Benaglia
>Microsoft MVP - SQL Server
>http://blogs.dotnethell.it/lorenzo/
>http://italy.mvps.org

lbenaglia Profilo | Guru

>>Prima di tutto l'invocazione del trigger è determinata dagli
>>eventi che specifichi nel comando CREATE TRIGGER.
>
>E questo viene indicato nell'attribute indicando Event = :
>[Microsoft.SqlServer.Server.SqlTrigger(Name = "Trigger", Target
>= "Table", Event = "FOR INSERT,UPDATE")]

Come ho scritto, io lo metterei SOLO nel comando T-SQL CREATE 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