Partage via


TRIGGER_NESTLEVEL (Transact-SQL)

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance

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.

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 trigger_type est spécifié, trigger_event_category doit également être spécifié.

' 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 trigger_event_category est spécifié, trigger_type doit également être spécifié. 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.

Remarques

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 retourner 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

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

CREATE TRIGGER (Transact-SQL)