Différence entre les déclencheurs FOR et AFTER?


Réponses:


153

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 OFdé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.


14
J'ai aimé le commentaire sur les insertions dans les vues utilisant des déclencheurs. Information très utile. À votre santé.
Mariusz

Excusez Monsieur @Ben, quel serait le scénario à insérer dans une vue? Merci ^ - ^
Jeancarlo Fontalvo

@JeancarloFontalvo, 1) compatibilité. Les tables sous-jacentes peuvent changer à condition que la vue reste la même. 2) contrôle d'accès, certains utilisateurs peuvent avoir l'autorisation d'écrire dans certaines colonnes uniquement.
Ben

17

@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.


4

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


1
Cette formulation "AFTER est la valeur par défaut lorsque FOR est le seul mot-clé spécifié." est très déroutant. Ils auraient pu mieux le formuler.
FMFF
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.