Spécifier les premier et dernier déclencheurs

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de données SQL dans Microsoft Fabric

Vous pouvez spécifier que l’un des déclencheurs AFTER associés à une table soit le premier ou le dernier déclencheur AFTER à se déclencher pour chacune des actions de déclenchement INSERT, DELETE et UPDATE. L'ordre d'exécution des déclencheurs AFTER activés entre les premier et dernier déclencheurs est indéfini.

Pour spécifier l’ordre d’exécution d’un déclencheur AFTER, utilisez la procédure stockée sp_settriggerorder . sp_settriggerorder comporte les options suivantes.

Option Description
First Spécifie que le déclencheur DML est le premier déclencheur AFTER activé dans le cadre d'une action de déclenchement.
Dernière Spécifie que le déclencheur DML est le dernier déclencheur AFTER activé dans le cadre d'une action de déclenchement.
Aucun(e) Spécifie qu'il n'existe aucun ordre spécifique pour l'activation du déclencheur DML. Utilisé principalement pour réinitialiser un déclencheur pour qu’il ne soit plus ni le premier ni le dernier.

L’exemple suivant illustre l’utilisation de la procédure stockée sp_settriggerorder:

sp_settriggerorder @triggername = 'MyTrigger', @order = 'first', @stmttype = 'UPDATE'  

Important

Le premier déclencheur et le dernier déclencheur doivent être deux déclencheurs DML distincts.

Une table peut avoir simultanément des déclencheurs INSERT, UPDATE et DELETE définis. Chaque type d'instruction peut posséder ses propres premier et dernier déclencheurs à condition qu'ils soient différents.

Si le premier ou le dernier déclencheur défini pour une table ne couvre pas une action de déclenchement, telle que le fait de ne pas couvrir FOR UPDATE, FOR DELETEou FOR INSERT, il n’existe aucun premier ou dernier déclencheur pour les actions manquantes.

Un déclencheur INSTEAD OF ne peut pas être défini en tant que premier ou dernier déclencheur. Il est activé avant l'apport de mises à jour aux tables sous-jacentes. Si des mises à jour sont apportées par un déclencheur INSTEAD OF à des tables sous-jacentes, elles se produisent avant l'activation des déclencheurs AFTER définis sur la table. Par exemple, si un déclencheur INSTEAD OF INSERT sur une vue insère des données dans une table de base et que la table de base elle-même contient un déclencheur INSTEAD OF INSERT et trois déclencheurs AFTER INSERT , le déclencheur INSTEAD OF INSERT sur la table de base est déclenché au lieu de l’action d’insertion, et les déclencheurs AFTER sur la table de base sont déclenchés après toute action d’insertion sur la table de base. Pour plus d'informations, consultez DML Triggers.

Si une ALTER TRIGGER instruction modifie un premier ou dernier déclencheur, l’attribut First ou Last est supprimé et la valeur de l’ordre est définie sur None. L’ordre d’exécution doit être réinitialisé à l’aide de sp_settriggerorder.

La fonction OBJECTPROPERTY indique si un déclencheur est un premier ou un dernier déclencheur à l’aide des propriétés suivantes : ExecIsFirstInsertTrigger, ExecIsFirstUpdateTrigger, ExecExecIsFirstDeleteTrigger, ExecIsLastInsertTrigger, ExecIsLastUpdateTriggeret ExecIsLastDeleteTrigger.

La réplication génère automatiquement un premier déclencheur pour toute table qui est incluse dans un abonnement avec mise à jour immédiate ou en attente. La réplication exige que son déclencheur soit le premier déclencheur. La réplication génère une erreur lorsque vous essayez d’inclure une table avec un premier déclencheur dans un abonnement de mise à jour immédiate ou de mise à jour en file d’attente. Si vous tentez de définir un déclencheur comme premier déclencheur après qu’une table a été incluse dans un abonnement, sp_settriggerorder retourne une erreur. Si vous utilisez ALTER sur le déclencheur de réplication ou si vous utilisez sp_settriggerorder pour que l’ordre corresponde au premier déclencheur ou pour qu’il n’y ait aucun ordre spécifique, l’abonnement ne fonctionnera pas correctement.