TRIGGER_NESTLEVEL (Transact-SQL)
Devuelve el número de desencadenadores que se han ejecutado para la instrucción que ha activado el desencadenador. TRIGGER_NESTLEVEL se utiliza en desencadenadores DML y DDL para determinar el nivel actual de anidamiento.
Convenciones de sintaxis de Transact-SQL
Sintaxis
TRIGGER_NESTLEVEL ( [ object_id ] , [ 'trigger_type' ] , [ 'trigger_event_category' ] )
Argumentos
object_id
Es el Id. de objeto de un desencadenador. Si se especifica object_id, se devuelve el número de veces que el desencadenador se ha ejecutado para la instrucción. Si no se especifica object_id, se devuelve el número de veces que se han ejecutado todos los desencadenadores para la instrucción.
'trigger_type'
Especifica si se aplica TRIGGER_NESTLEVEL a los desencadenadores AFTER o a los desencadenadores INSTEAD OF. Especifique AFTER para desencadenadores AFTER. Especifique IOT para desencadenadores INSTEAD OF. Si se especifica trigger_type, también se debe especificar trigger_event_category.
'trigger_event_category'
Especifica si se aplica TRIGGER_NESTLEVEL a desencadenadores DML o DDL. Especifique DML para desencadenadores DML. Especifique DDL para desencadenadores DDL. Si se especifica trigger_event_category, también se debe especificar trigger_type. Tenga en cuenta que sólo se puede especificar AFTER con DDL, ya que los desencadenadores DDL sólo pueden ser desencadenadores AFTER.
Notas
Cuando no se especifica ningún parámetro, TRIGGER_NESTLEVEL devuelve el número total de desencadenadores de la pila de llamadas. Esto incluye el propio desencadenador. La omisión de los parámetros puede darse cuando un desencadenador ejecuta comandos que causan la activación de otro desencadenador o de una serie de desencadenadores.
Para devolver el número total de desencadenadores de la pila de llamadas para un tipo de desencadenador y una categoría de eventos determinados, especifique object_id = 0.
TRIGGER_NESTLEVEL devuelve 0 si se ejecuta fuera de un desencadenador y cualquier parámetro es distinto de NULL.
Cuando algunos parámetros se especifican explícitamente como NULL, el valor de NULL se devuelve independientemente de si TRIGGER_NESTLEVEL se utilizó dentro o fuera de un desencadenador.
Ejemplos
A. Probar el nivel de anidamiento de un desencadenador DML específico
IF ( (SELECT TRIGGER_NESTLEVEL( OBJECT_ID('xyz') , 'AFTER' , 'DML' ) ) > 5 )
RAISERROR('Trigger xyz nested more than 5 levels.',16,-1)
B. Probar el nivel de anidamiento de un desencadenador DDL específico
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. Probar el nivel de anidamiento de todos los desencadenadores ejecutados
IF ( (SELECT trigger_nestlevel() ) > 5 )
RAISERROR
('This statement nested over 5 levels of triggers.',16,-1)