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