Compartilhar via


TRIGGER_NESTLEVEL (Transact-SQL)

Retorna o número de gatilhos executados para a instrução que acionou o gatilho. TRIGGER_NESTLEVEL é usado em gatilhos DML e DDL para determinar o nível atual de aninhamento.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

TRIGGER_NESTLEVEL ( [ object_id ] , [ 'trigger_type' ] , [ 'trigger_event_category' ] )

Argumentos

  • object_id
    É o ID de objeto de um gatilho. Se object_id for especificado, será retornado o número de vezes que o gatilho especificado foi executado para a instrução. Se object_id não for especificado, será retornado o número de vezes que todos os gatilhos foram executados para a instrução.

  • 'trigger_type'
    Especifica se deve ser aplicado TRIGGER_NESTLEVEL a gatilhos AFTER ou disparadores INSTEAD OF. Especifique AFTER para gatilhos AFTER. Especifique IOT para gatilhos 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 gatilhos DML ou DDL. Especifique DML para gatilhos DML. Especifique DDL para gatilhos 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 gatilhos DDL só podem ser gatilhos AFTER.

Comentários

Quando nenhum parâmetro for especificado, TRIGGER_NESTLEVEL retornará o número total de gatilhos na pilha de chamada. Isto inclui ele próprio. Pode ocorrer omissão de parâmetros quando um gatilho executar comandos que causem o acionamento de outro gatilho ou criar uma sucessão de gatilhos de acionamento.

Para retornar o número total de gatilhos na pilha de chamada para um tipo de gatilho e uma categoria de evento específica, especifique object_id = 0.

TRIGGER_NESTLEVEL retornará 0 se for executado fora de um gatilho 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 gatilho.

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 aninhando de todos os gatilhos executados

IF ( (SELECT trigger_nestlevel() ) > 5 )
   RAISERROR
      ('This statement nested over 5 levels of triggers.',16,-1)

Consulte também

Referência