Qual è la differenza tra FOR
e AFTER
trigger?
Qual è la differenza tra FOR
e AFTER
trigger?
Risposte:
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 OF
trigger è diverso e si attiva prima e al posto dell'inserimento e può essere utilizzato nelle viste, per inserire i valori appropriati nelle tabelle sottostanti.
@ 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.
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