Sei sulla pagina 1di 2

TRIGGER_NESTLEVEL

(Transact-SQL)
Otras versiones

Devuelve el nmero de desencadenadores que se han ejecutado para la instruccin que ha


activado el desencadenador. TRIGGER_NESTLEVEL se utiliza en desencadenadores DML y DDL
para determinar el nivel actual de anidamiento.

Se aplica a: SQL Server (SQL Server 2008 a versin actual), Windows Azure SQL
Database (Versin inicial a versin actual).

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
nmero de veces que el desencadenador especificado se ha ejecutado para la
instruccin. Si no se especifica object_id, se devuelve el nmero de veces que se han
ejecutado todos los desencadenadores para la instruccin.
' trigger_type '
Especifica si se aplica TRIGGER_NESTLEVEL a los desencadenadores AFTER o a los
desencadenadores INSTEAD OF. Especifique AFTERpara desencadenadores
AFTER. Especifique IOT para desencadenadores INSTEAD OF. Si se
especifica trigger_type, se debe especificar tambin 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, se debe especificar
tambin trigger_type. 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 ningn parmetro, TRIGGER_NESTLEVEL devuelve el nmero total de
desencadenadores de la pila de llamadas. Esto incluye el propio desencadenador. La omisin de
los parmetros puede darse cuando un desencadenador ejecuta comandos que causan la
activacin de otro desencadenador o de una serie de desencadenadores.
Para devolver el nmero total de desencadenadores en la pila de llamadas para un tipo de
desencadenador y una categora de eventos determinados, especifique object_id = 0.
TRIGGER_NESTLEVEL devuelve 0 si se ejecuta fuera de un desencadenador y cualquier
parmetro es distinto de NULL.
Cuando algunos parmetros se especifican explcitamente 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 especfico
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 especfico


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)

Potrebbero piacerti anche