TRIGGER_NESTLEVEL (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

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' ] )  

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

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 especificado 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, trigger_event_category también debe especificarse.

'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, trigger_type también debe especificarse. Tenga en cuenta que solo se puede especificar AFTER con DDL, ya que los desencadenadores DDL solo pueden ser desencadenadores AFTER.

Comentarios

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

Vea también

CREATE TRIGGER (Transact-SQL)