Megosztás a következőn keresztül:


TRIGGER_NESTLEVEL (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Visszaadja a ravaszok számát, amely a ravaszt elindította. TRIGGER_NESTLEVEL a DML és DDL triggerekben használják a jelenlegi fészkelődési szint meghatározására.

Transact-SQL szintaxis konvenciók

Szemantika

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

Arguments

object_id
A trigger objektumazonosítója. Ha object_id meg van jelölve, visszakerül, hányszor hajtották végre a megadott triggert az utasításhoz. Ha object_id nincs megadva, visszakerül, hányszor hajtották végre az utasításhoz tartozó triggereket.

'trigger_type'
Megadja, hogy a TRIGGER_NESTLEVEL-t alkalmazzuk-e AFTER triggerekre, vagy HELYETTE a triggerekre. Megadd az AFTER triggereket az AFTER triggerekhez. Megadd az IOT-t a INSTEAD triggerek számára. Ha trigger_type meg van jelölve, trigger_event_category is meg kell határozni.

'trigger_event_category'
Megadja, hogy alkalmazzuk-e TRIGGER_NESTLEVEL-t DML vagy DDL triggerekre. Megadd a DML-t a DML triggerekhez. Megadja a DDL-t a DDL triggerekhez. Ha trigger_event_category meg van jelölve, akkor trigger_type is meg kell határozni. Fontos megjegyezni, hogy a DDL csak AFTER lehet megadni, mert a DDL triggerek csak AFTER triggerek lehetnek.

Megjegyzések

Ha nincs paraméter, TRIGGER_NESTLEVEL visszaadja a hívás stack összes triggerszámát. Ez magában is magában foglal. Paraméterek kihagyása előfordulhat, amikor egy ravasz végrehajtja a parancsokat, ami egy másik ravaszt indít, vagy sorozatot hoz létre a kilőtő ravaszok sorozatában.

Ahhoz, hogy visszaadjuk a hívás stack összes triggerszámát egy adott triggertípusra és eseménykategóriára, megadjuk object_id = 0-t.

TRIGGER_NESTLEVEL 0-ot ad vissza, ha a triggeren kívül hajtják végre, és bármilyen paraméter nem NULL.

Ha bármely paramétert kifejezetten NULL-ként jelölnek meg, akkor a NULL értéket visszakapják, függetlenül attól, hogy TRIGGER_NESTLEVEL használták-e a trigger belső vagy külső részén.

Példák

A. Egy adott DML trigger fészkelési szintjének tesztelése

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

B. Egy adott DDL trigger fészkelési szintjének tesztelése

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. Az összes végrehajtott trigger fészkelési szintjének tesztelése

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

Lásd még:

LÉTREHOZNI TRIGGERET (Transact-SQL)