Udostępnij za pomocą


TRIGGER_NESTLEVEL (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w usłudze Microsoft Fabric

Zwraca liczbę wyzwalaczy wykonanych dla instrukcji, która go wywołała. TRIGGER_NESTLEVEL jest używany w wyzwalaczach, DML i DDL, aby określić aktualny poziom zagnieżdżania.

Transact-SQL konwencje składni

Składnia

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

Arguments

object_id
Jest identyfikatorem obiektu wyzwalacza. Jeśli object_id jest określone, zwracana jest liczba wywołań wyzwalających określone wyzwalanie dla danego polecenia. Jeśli object_id nie jest określone, zwracana jest liczba wyzwalaczy, ile wszystkie wyzwalacze zostały wykonane.

'trigger_type'
Określa, czy należy stosować TRIGGER_NESTLEVEL do wyzwalaczy PO, czy ZAMIAST WYZWALACZY. Określ AFTER dla wyzwalaczy AFTER. Określ IOT dla wyzwalaczy INSTEAD ON. Jeśli trigger_type jest określona, trigger_event_category również musi być określona.

'trigger_event_category'
Określa, czy należy stosować TRIGGER_NESTLEVEL do wyzwalaczy DML czy DDL. Określ DML dla wyzwalaczy DML. Określ DDL dla wyzwalaczy DDL. Jeśli trigger_event_category jest określone, trigger_type również musi być określone. Należy zauważyć, że za pomocą DDL można określić tylko AFTER, ponieważ wyzwalacze DDL mogą być tylko AFTER.

Uwagi

Gdy nie podano żadnych parametrów, TRIGGER_NESTLEVEL zwraca łączną liczbę wyzwalaczy na stosie wywołań. Dotyczy to także samego siebie. Pominięcie parametrów może wystąpić, gdy wyzwalacz wykona polecenia, powodując uruchomienie kolejnego wyzwalacza lub tworzy kolejne wyzwalanie wyzwalaczy.

Aby zwrócić łączną liczbę wyzwalaczy na stosie wywołań dla danego typu wyzwalacza i kategorii zdarzeń, należy określić object_id = 0.

TRIGGER_NESTLEVEL zwraca 0, jeśli zostanie wykonany poza wyzwalaczem i żadne parametry nie są NULL.

Gdy jakiekolwiek parametry są wyraźnie określone jako NULL, zwracana jest wartość NULL niezależnie od tego, czy TRIGGER_NESTLEVEL użyto wewnątrz, czy zewnętrznego dla wyzwalacza.

Przykłady

A. Testowanie poziomu zagnieżdżenia konkretnego wyzwalacza DML

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

B. Testowanie poziomu zagnieżdżania konkretnego wyzwalacza DDL

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. Testowanie poziomu zagnieżdżania wszystkich wyzwalaczy wykonywanych

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

Zobacz też

UTWÓRZ TRIGGER (Transact-SQL)