Quelle est la différence entre FOR
et les AFTER
déclencheurs?
Quelle est la différence entre FOR
et les AFTER
déclencheurs?
Réponses:
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 INSTEAD OF
déclencheur est différent et se déclenche avant et à la place de l'insertion et peut être utilisé sur les vues, afin d'insérer les valeurs appropriées dans les tables sous-jacentes.
@Ben a tout à fait raison.
Voici l'article MSDN Exploration des déclencheurs SQL Server
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 faire référence aux déclencheurs FOR en tant que déclencheurs AFTER. Ainsi, pour le reste de cet article, je ferai référence aux déclencheurs AFTER ou INSTEAD OF.
Comme le déclencheur AFTER que vous avez vu précédemment, ce déclencheur empêche les modifications apportées au champ de nom. Cependant, il implémente cette règle métier différemment de l'exemple précédent. Étant donné que le déclencheur INSTEAD OF se déclenche à la place de l'instruction UPDATE, le déclencheur INSTEAD OF évalue ensuite si le test de règle métier réussit ou non. Si le test de règle métier réussit, pour que la mise à jour se produise, le déclencheur INSTEAD OF doit invoquer à nouveau explicitement l'instruction UPDATE.
AFTER spécifie que le déclencheur DML est déclenché uniquement lorsque toutes les opérations spécifiées dans l'instruction SQL de déclenchement se sont exécutées avec succès. Toutes les actions en cascade référentielle et les vérifications de contraintes doivent également réussir avant que ce déclencheur ne se déclenche. 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, remplaçant par conséquent les actions des instructions de déclenchement. INSTEAD OF ne peut pas être spécifié pour les déclencheurs DDL ou d'ouverture de session.
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql