Condividi tramite


TRIGGER_NESTLEVEL (Transact-SQL)

Restituisce il numero di trigger eseguiti per l'istruzione che ha attivato il trigger. TRIGGER_NESTLEVEL viene utilizzata nei trigger DML e DDL per determinare il livello di nidificazione.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • object_id
    ID di oggetto di un trigger. Se si specifica object_id, viene restituito il numero di esecuzioni del trigger specificato per l'istruzione. Se si specifica object_id, viene restituito il numero di esecuzioni di tutti i trigger per l'istruzione.

  • 'trigger_type'
    Specifica se applicare TRIGGER_NESTLEVEL ai trigger AFTER oppure ai trigger INSTEAD OF. Specificare AFTER per i trigger AFTER. Specificare IOT per i trigger INSTEAD OF. Se si specifica trigger_type, è necessario specificare anche trigger_event_category.

  • 'trigger_event_category'
    Specifica se applicare TRIGGER_NESTLEVEL ai trigger DML o DDL. Specificare DML per i trigger DML. Specificare DDL per i trigger DDL. Se si specifica trigger_event_category, è necessario specificare anche trigger_type. Se si specifica DDL è possibile specificare solo AFTER in quanto i trigger DDL possono essere solo trigger AFTER.

Osservazioni

Se non si specifica alcun parametro, TRIGGER_NESTLEVEL restituisce il numero totale di trigger nello stack di chiamate. Nel numero è incluso il parametro stesso. È possibile omettere i parametri quando un trigger esegue comandi che provocano l'attivazione di un altro trigger o crea una serie di attivazioni di trigger.

Per restituire il numero totale di trigger nello stack di chiamate per un tipo di trigger specifico o una categoria di eventi specifica, impostare object_id = 0.

TRIGGER_NESTLEVEL restituisce il valore 0 se viene eseguita all'esterno di un trigger e i parametri sono diversi da NULL.

Se i parametri vengono specificati in modo esplicito come NULL, viene restituito il valore NULL indipendentemente dal fatto che TRIGGER_NESTLEVEL sia stata utilizzata all'interno o all'esterno di un trigger.

Esempi

A. Controllo del livello di nidificazione di un trigger DML specifico

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

B. Controllo del livello di nidificazione di un trigger DDL specifico

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. Controllo del livello di nidificazione di tutti i trigger

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

Vedere anche

Riferimento