Quelle est la différence entre les déclencheurs FOR et AFTER?
Il n'y a pas de différence, ils font la même chose.
CREATE TRIGGER trgTable on dbo.Table FOR INSERT,UPDATE,DELETE
Est le même que
CREATE TRIGGER trgTable on dbo.Table AFTER INSERT,UPDATE,DELETE
Un déclencheur INSTEAD OF
est différent, et se déclenche avant et au lieu de l'insertion et peut être utilisé sur des vues afin d'insérer les valeurs appropriées dans les tables sous-jacentes.
@Ben a absolument raison.
Voici l'article de MSDN Exploring SQL Server Triggers
Un paragraphe de l'article:
Cette syntaxe est également acceptable dans les anciennes versions de SQL Server. Cependant, maintenant qu'il existe deux types de déclencheurs dans SQL Server 2000, je préfère appeler les déclencheurs FOR comme des déclencheurs AFTER. Ainsi, pour la suite de cet article, je me référerai aux déclencheurs AFTER ou INSTEAD OF.
Comme le déclencheur AFTER que vous avez vu précédemment, ce déclencheur empêche toute modification du champ lastname. Cependant, cette règle de gestion est mise en œuvre différemment de l'exemple précédent. Etant donné que le déclencheur INSTEAD OF est déclenché à la place de l'instruction UPDATE, il déclenche ensuite l'évaluation du test de la règle de gestion ou non. Si le test de la règle métier réussit, pour que la mise à jour se produise, le déclencheur INSTEAD OF doit explicitement appeler à nouveau l'instruction UPDATE.
AFTER spécifie que le déclencheur DML est activé uniquement lorsque toutes les opérations spécifiées dans l'instruction SQL de déclenchement ont été exécutées avec succès. Toutes les actions en cascade référentielles et les contrôles de contrainte doivent également réussir avant que ce déclencheur ne soit déclenché. AFTER est la valeur par défaut lorsque FOR est le seul mot clé spécifié.
Les déclencheurs AFTER ne peuvent pas être définis sur les vues.
INSTEAD OF Spécifie que le déclencheur DML est exécuté à la place de l'instruction SQL de déclenchement, par conséquent, redéfinit les actions des instructions de déclenchement. INSTEAD OF ne peut pas être spécifié pour les déclencheurs DDL ou de connexion.
https://docs.Microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql