Partager via


TRIGGER_NESTLEVEL (Transact-SQL)

Renvoie le nombre de déclencheurs exécutés pour l'instruction qui a activé le déclencheur. TRIGGER_NESTLEVEL est utilisé dans les déclencheurs DML et DDL pour déterminer le niveau d'imbrication actuel.

Icône Lien de rubrique Conventions de la syntaxe Transact-SQL

Syntaxe

TRIGGER_NESTLEVEL ( [ object_id ] , [ 'trigger_type' ] , [ 'trigger_event_category' ] )

Arguments

  • object_id
    Identificateur d'objet d'un déclencheur. Si l'argument object_id est spécifié, la valeur renvoyée est le nombre d'exécutions du déclencheur indiqué pour l'instruction. Si object_id n'est pas spécifié, c'est le nombre d'exécutions de tous les déclencheurs pour l'instruction qui est renvoyé.

  • 'trigger_type'
    Spécifie si TRIGGER_NESTLEVEL doit s'appliquer aux déclencheurs AFTER ou aux déclencheurs INSTEAD OF. Spécifiez AFTER pour les déclencheurs AFTER. Spécifiez IOT pour les déclencheurs INSTEAD OF. Si vous spécifiez l'argument trigger_type, vous devez également définir trigger_event_category.

  • 'trigger_event_category'
    Spécifie si TRIGGER_NESTLEVEL doit s'appliquer aux déclencheurs DML ou DDL. Spécifiez DML pour les déclencheurs DML. Spécifiez DDL pour les déclencheurs DDL. Si vous spécifiez l'argument trigger_event_category, vous devez également définir trigger_type. Notez que seule la valeur AFTER peut être spécifiée avec DDL, car les déclencheurs DDL ne peuvent être que des déclencheurs AFTER.

Notes

Si aucun paramètre n'est spécifié, TRIGGER_NESTLEVEL renvoie le nombre total de déclencheurs sur la pile des appels. Elle est comprise elle-même dans ce décompte. Les paramètres peuvent être omis lorsqu'un déclencheur exécute des commandes entraînant l'activation d'un autre déclencheur ou provoque l'activation d'une succession de déclencheurs.

Pour renvoyer le nombre total de déclencheurs sur la pile des appels pour un type de déclencheur et une catégorie d'événement déterminés, spécifiez object_id = 0.

TRIGGER_NESTLEVEL renvoie la valeur 0 si son exécution se produit à l'extérieur d'un déclencheur et si aucun paramètre n'a la valeur NULL.

Si des paramètres sont explicitement spécifiés avec la valeur NULL, une valeur NULL est renvoyée, que TRIGGER_NESTLEVEL ait été utilisé à l'intérieur ou à l'extérieur d'un déclencheur.

Exemples

A.Test du niveau d'imbrication d'un déclencheur DML spécifique

IF ( (SELECT TRIGGER_NESTLEVEL( OBJECT_ID('xyz') , 'AFTER' , 'DML' ) ) > 5 )
   RAISERROR('Trigger xyz nested more than 5 levels.',16,-1)

B.Test du niveau d'imbrication d'un déclencheur DDL spécifique

IF ( ( SELECT TRIGGER_NESTLEVEL ( ( SELECT object_id FROM sys.triggers
WHERE name = 'abc' ), 'AFTER' , 'DDL' ) ) > 5 )
   RAISERROR ('Trigger abc nested more than 5 levels.',16,-1)

C.Test du niveau d'imbrication de tous les déclencheurs exécutés

IF ( (SELECT trigger_nestlevel() ) > 5 )
   RAISERROR
      ('This statement nested over 5 levels of triggers.',16,-1)

Voir aussi

Référence

CREATE TRIGGER (Transact-SQL)