TRIGGER_NESTLEVEL (Transact-SQL)
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure
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.
Convenzioni relative alla 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 non 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 trigger_type viene specificato, deve essere specificato 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 trigger_event_category viene specificato, deve essere specificato anche trigger_type. Se si specifica DDL è possibile specificare solo AFTER perché 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
R. 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)