Differenza tra i trigger FOR e AFTER?


Risposte:


153

Non c'è differenza, fanno la stessa cosa.

CREATE TRIGGER trgTable on dbo.Table FOR INSERT,UPDATE,DELETE

Equivale a

CREATE TRIGGER trgTable on dbo.Table AFTER INSERT,UPDATE,DELETE

Un INSTEAD OFtrigger è diverso e si attiva prima e al posto dell'inserimento e può essere utilizzato nelle viste, per inserire i valori appropriati nelle tabelle sottostanti.


14
Mi è piaciuto il commento sugli inserti nelle visualizzazioni utilizzando i trigger. Informazioni molto utili. Saluti.
Mariusz

Scusa Mister @Ben, quale sarebbe lo scenario da inserire in una view? Grazie ^ - ^
Jeancarlo Fontalvo

@JeancarloFontalvo, 1) compatibilità. Le tabelle sottostanti possono cambiare a condizione che la visualizzazione rimanga la stessa. 2) controllo degli accessi, alcuni utenti potrebbero avere il permesso di scrivere solo su determinate colonne.
Ben

17

@ Ben ha assolutamente ragione.

Di seguito è riportato l'articolo di MSDN Esplorazione dei trigger di SQL Server

Un paragrafo dell'articolo:

Questa sintassi è accettabile anche nelle versioni precedenti di SQL Server. Tuttavia, ora che ci sono due tipi di trigger in SQL Server 2000, preferisco fare riferimento ai trigger FOR come trigger AFTER. Pertanto, per il resto di questo articolo farò riferimento ai trigger AFTER o INSTEAD OF.

Come il trigger AFTER che hai visto in precedenza, questo trigger impedisce che vengano apportate modifiche al campo del cognome. Tuttavia, implementa questa regola aziendale in modo diverso rispetto all'esempio precedente. Poiché il trigger INSTEAD OF si attiva al posto dell'istruzione UPDATE, il trigger INSTEAD OF valuta quindi se il test delle regole di business viene superato o meno. Se il test della regola aziendale viene superato, affinché l'aggiornamento avvenga, il trigger INSTEAD OF deve richiamare di nuovo esplicitamente l'istruzione UPDATE.


4

AFTER specifica che il trigger DML viene attivato solo quando tutte le operazioni specificate nell'istruzione SQL di attivazione sono state eseguite correttamente. Tutte le azioni referenziali a cascata e le verifiche dei vincoli devono avere esito positivo prima che questo trigger venga attivato. AFTER è l'impostazione predefinita quando FOR è l'unica parola chiave specificata.

I trigger AFTER non possono essere definiti nelle viste.

INSTEAD OF Specifica che il trigger DML viene eseguito al posto dell'istruzione SQL di attivazione, quindi sovrascrivendo le azioni delle istruzioni di attivazione. INSTEAD OF non può essere specificato per DDL o trigger di accesso.

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql


1
Questa frase "AFTER è l'impostazione predefinita quando FOR è l'unica parola chiave specificata". è molto confuso. Avrebbero potuto formularlo meglio.
FMFF
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.