Udostępnij za pośrednictwem


TRIGGER_NESTLEVEL (języka Transact-SQL)

Zwraca liczbę wyzwalaczy wykonywanych dla instrukcji, która uruchomiła wyzwalacz.Instrukcja TRIGGER_NESTLEVEL jest używana w wyzwalaczach języków DML i DDL do ustalania bieżącego poziomu zagnieżdżenia.

Topic link iconKonwencje składni języka Transact-SQL

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

Argumenty

  • object_id
    Identyfikator obiektu wyzwalacza.Jeśli jest podany parametr object_id, zwracana jest liczba wykonań określonego wyzwalacza dla instrukcji.Jeśli nie jest podany parametr object_id, zwracana jest liczba wykonań wszystkich wyzwalaczy dla instrukcji.

  • 'trigger_type'
    Takie ścieżka logicznie jest reprezentowana jako sekwencji etykiet węzłów wszystkich elementów podrzędnych odwiedzone od katalogu głównego.Określ PO dla, po wyzwalaczy.Określ IOT o, a nie z wyzwalaczami.Jeśli trigger_type jest określony, trigger_event_category musi być także określona.

  • 'trigger_event_category'
    Każdy poziom jest zakończony znakiem kreski ułamkowej.Określ DML DML wyzwalaczy.Określ DDL wyzwalaczy DDL.Jeśli trigger_event_category jest określony, trigger_type musi być także określona. Należy zauważyć, że tylko PO za pomocą można określićDDL, ponieważ DDL Wyzwalacze mogą być tylko po wyzwalaczy.

Remarks

Jeśli nie są podane żadne parametry, instrukcja TRIGGER_NESTLEVEL zwraca łączną liczbę wyzwalaczy na stosie wywołań.Uwzględnia również samą siebie.Pominięcie parametrów może nastąpić, jeśli wyzwalacz wykonuje polecenie powodujące uruchomienie innego wyzwalacza lub seryjnie uruchamia wyzwalacze.

Aby przywrócić całkowita liczba wyzwalaczy na stos wywołań dla kategorii typu i zdarzeń określonego wyzwalacza, określanie object_id = 0.

Instrukcja TRIGGER_NESTLEVEL zwraca wartość 0, jeśli jest wykonywana poza wyzwalaczem i żaden z parametrów nie jest równy NULL.

Jeśli jakiekolwiek parametry są jawnie określone jako wartości NULL, zwracana jest wartość NULL niezależnie od tego, czy instrukcji TRIGGER_NESTLEVEL użyto w wyzwalaczu, czy poza nim.

Przykłady

A.Konwersja typu danych

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żenia określonego wyzwalacza języka 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żenia wszystkich wykonywanych wyzwalaczy

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