TRIGGER_NESTLEVEL (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Returnerar antalet triggers som körts för uttalandet som utlöste triggern. TRIGGER_NESTLEVEL används i DML- och DDL-triggers för att bestämma den aktuella nivån av nästling.

Transact-SQL syntaxkonventioner

Syntax

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

Arguments

object_id
Är objekt-ID:t för en trigger. Om object_id anges returneras antalet gånger den angivna triggern har körts för satsen. Om object_id inte specificeras returneras antalet gånger alla triggers har körts för uttalandet.

'trigger_type'
Specificerar om TRIGGER_NESTLEVEL ska tillämpas på EFTER-triggers eller ISTÄLLET FÖR triggers. Specificera EFTER för EFTER-triggers. Specificera IOT för ISTÄLLET FÖR triggers. Om trigger_type anges måste trigger_event_category också anges.

'trigger_event_category'
Specificerar om TRIGGER_NESTLEVEL ska tillämpas på DML- eller DDL-triggers. Ange DML för DML-triggers. Ange DDL för DDL-triggers. Om trigger_event_category anges måste trigger_type också anges. Observera att endast EFTER kan specificeras med DDL, eftersom DDL-triggers bara kan vara EFTER-triggers.

Anmärkningar

När inga parametrar anges returnerar TRIGGER_NESTLEVEL det totala antalet triggers på anropsstacken. Detta inkluderar sig själv. Utelämnande av parametrar kan inträffa när en avtryckare utför kommandon som får en annan avtryckare att avfyras eller skapar en följd av avfyrande avtryckare.

För att returnera det totala antalet triggers på anropsstacken för en viss triggertyp och händelsekategori, specificera object_id = 0.

TRIGGER_NESTLEVEL returnerar 0 om det utförs utanför en trigger och inga parametrar inte är NULL.

När några parametrar uttryckligen anges som NULL returneras värdet NULL oavsett om TRIGGER_NESTLEVEL användes inom eller utanför en trigger.

Examples

A. Testa inbäddningsnivån för en specifik DML-trigger

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

B. Testa inbäddningsnivån för en specifik DDL-trigger

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. Testar nästlingsnivån för alla utförda triggers

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

Se även

SKAPA UTLÖSARE (Transact-SQL)