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.

Icono de vínculo a temasConvenciones 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)

Vea también

Referencia

CREATE TRIGGER (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005