TRIGGER_NESTLEVEL (Transact-SQL)
Retorna o número de disparadores executados para a instrução que acionou o disparador. TRIGGER_NESTLEVEL é usado em disparadores DML e DDL para determinar o nível atual de aninhamento.
Aplica-se a: SQL Server (SQL Server 2008 até a versão atual), Banco de dados SQL do Windows Azure (versão inicial até a versão atual). |
Convenções da sintaxe Transact-SQL
Sintaxe
TRIGGER_NESTLEVEL ( [ object_id ] , [ 'trigger_type' ] , [ 'trigger_event_category' ] )
Argumentos
object_id
É o ID de objeto de um disparador. Se object_id for especificado, será retornado o número de vezes que o disparador especificado foi executado para a instrução. Se object_id não for especificado, será retornado o número de vezes que todos os disparadores foram executados para a instrução.' trigger_type '
Especifica se deve ser aplicado TRIGGER_NESTLEVEL a disparadores AFTER ou disparadores INSTEAD OF. Especifique AFTER para disparadores AFTER. Especifique IOT para disparadores INSTEAD OF. Se trigger_type for especificado, também será necessário especificar trigger_event_category.' trigger_event_category '
Especifica se deve ser aplicado TRIGGER_NESTLEVEL a disparadores DML ou DDL. Especifique DML para disparadores DML. Especifique DDL para disparadores DDL. Se trigger_event_category for especificado, também será necessário especificar trigger_type. Observe que apenas AFTER pode ser especificado com DDL, porque disparadores DDL só podem ser disparadores AFTER.
Comentários
Quando nenhum parâmetro for especificado, TRIGGER_NESTLEVEL retornará o número total de disparadores na pilha de chamada. Isto inclui ele próprio. Pode ocorrer omissão de parâmetros quando um disparador executar comandos que causem o acionamento de outro disparador ou criar uma sucessão de disparadores de acionamento.
Para retornar o número total de disparadores na pilha de chamada para um tipo de disparador e uma categoria de evento específica, especifique object_id = 0.
TRIGGER_NESTLEVEL retornará 0 se for executado fora de um disparador e quaisquer parâmetros não forem NULL.
Quando quaisquer parâmetros forem especificados explicitamente como NULL, um valor NULL será retornado independentemente do fato de TRIGGER_NESTLEVEL ser usado interna ou externamente a um disparador.
Exemplos
A.Testando o nível de aninhamento de um gatilho DML específico
IF ( (SELECT TRIGGER_NESTLEVEL( OBJECT_ID('xyz') , 'AFTER' , 'DML' ) ) > 5 )
RAISERROR('Trigger xyz nested more than 5 levels.',16,-1)
B.Testando o nível de aninhamento de um gatilho 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.Testando o nível de aninhamento de todos os gatilhos executados
IF ( (SELECT trigger_nestlevel() ) > 5 )
RAISERROR
('This statement nested over 5 levels of triggers.',16,-1)