Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza 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)