TRIGGER_NESTLEVEL (Transact-SQL)

Gibt die Anzahl von Triggern zurück, die für die Anweisung ausgelöst wurden, von der der Trigger ausgeführt wurde. TRIGGER_NESTLEVEL wird in DML- und DDL-Triggern verwendet, um die aktuelle Schachtelungsebene zu bestimmen.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

  • object_id
    Die Objekt-ID eines Triggers. Wenn object_id angegeben wird, wird die Häufigkeit zurückgegeben, mit der der angegebene Trigger für die Anweisung ausgeführt wurde. Wenn object_id nicht angegeben wird, wird die Häufigkeit zurückgegeben, mit der alle Trigger für die Anweisung ausgeführt wurden.

  • 'trigger_type'
    Gibt an, ob TRIGGER_NESTLEVEL auf AFTER- oder INSTEAD OF-Trigger angewendet werden soll. Geben Sie AFTER für AFTER-Trigger an. Geben Sie IOT für INSTEAD OF-Trigger an. Wenn trigger_type angegeben ist, muss auch trigger_event_category angegeben werden.

  • 'trigger_event_category'
    Gibt an, ob TRIGGER_NESTLEVEL auf DML- oder DDL-Trigger angewendet werden soll. Geben Sie DML für DML-Trigger an. Geben Sie DDL für DDL-Trigger an. Wenn trigger_event_category angegeben ist, muss auch trigger_type angegeben werden.Beachten Sie, dass nur AFTER für DDL angegeben werden kann, weil DDL-Trigger nur AFTER-Trigger sein können.

Hinweise

Wenn keine Parameter angegeben werden, gibt TRIGGER_NESTLEVEL die Gesamtanzahl von Triggern in der Aufrufliste zurück. Der Parameter selbst ist ebenfalls darin eingeschlossen. Es kann vorkommen, dass Parameter nicht angegeben werden, wenn ein Trigger Befehle ausführt, die das Auslösen eines anderen Triggers bewirken, oder wenn er eine Folge von ausgelösten Triggern erzeugt.

Geben Sie object_id = 0 an, um die Gesamtanzahl von Triggern in der Aufrufliste für einen bestimmten Triggertyp und eine bestimmte Ereigniskategorie zurückzugeben.

Eine TRIGGER_NESTLEVEL-Anweisung gibt 0 zurück, wenn sie außerhalb eines Triggers ausgeführt wird und ein Parameter ungleich NULL ist.

Wenn ein Parameter explizit als NULL angegeben wird, wird der Wert NULL zurückgegeben, unabhängig davon, ob TRIGGER_NESTLEVEL innerhalb oder außerhalb eines Triggers verwendet wurde.

Beispiele

A. Testen der Schachtelungsebene eines bestimmten DML-Triggers

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

B. Testen der Schachtelungsebene eines bestimmten DDL-Triggers

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. Testen der Schachtelungsebene aller ausgeführten Trigger

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

Siehe auch

Verweis