Partilhar via


TRIGGER_NESTLEVEL (Transact-SQL)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Devolve o número de gatilhos executados para a instrução que disparou o gatilho. TRIGGER_NESTLEVEL é usado nos gatilhos DML e DDL para determinar o nível atual de nesting.

Transact-SQL convenções de sintaxe

Sintaxe

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

Arguments

object_id
É o ID do objeto de um gatilho. Se object_id for especificado, o número de vezes que o gatilho especificado foi executado para a instrução é devolvido. Se object_id não for especificado, é devolvido o número de vezes que todos os disparadores foram executados para a instrução.

'trigger_type'
Especifica se deve aplicar TRIGGER_NESTLEVEL aos gatilhos AFTER ou INSTEAD OF triggers. Especifique AFTER para os gatilhos AFTER. Especifique IoT para EM VEZ de triggers. Se trigger_type for especificado, trigger_event_category também deve ser especificado.

'trigger_event_category'
Especifica se deve aplicar TRIGGER_NESTLEVEL a gatilhos DML ou DDL. Especifique DML para os gatilhos DML. Especifique DDL para os gatilhos DDL. Se trigger_event_category for especificado, trigger_type também deve ser especificado. Note que só pode ser especificado DEPOIS com DDL, porque os gatilhos DDL só podem ser gatilhos DEPOIS.

Observações

Quando não são especificados parâmetros, TRIGGER_NESTLEVEL devolve o número total de disparadores na pilha de chamadas. Isto inclui-se a si próprio. A omissão de parâmetros pode ocorrer quando um gatilho executa comandos que provocam o disparo de outro gatilho ou cria uma sucessão de gatilhos de disparo.

Para devolver o número total de gatilhos na pilha de chamadas para um determinado tipo de gatilho e categoria de evento, especifique object_id = 0.

TRIGGER_NESTLEVEL devolve 0 se for executado fora de um trigger e quaisquer parâmetros não forem NULL.

Quando qualquer parâmetro é explicitamente especificado como NULL, um valor de NULL é devolvido independentemente de TRIGGER_NESTLEVEL ter sido usado dentro ou fora de um trigger.

Examples

A. Testar o nível de aninhamento de um disparador DML específico

IF ( (SELECT TRIGGER_NESTLEVEL( OBJECT_ID('xyz') , 'AFTER' , 'DML' ) ) > 5 )  
   RAISERROR('Trigger xyz nested more than 5 levels.',16,-1)  

B. Testar o nível de aninhamento de um disparador 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. Testar 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)  

Ver também

CRIAR GATILHO (Transact-SQL)