本文件已封存並已停止維護。
TRIGGER_NESTLEVEL (Transact-SQL)
SQL Server 2005
傳回針對引發了觸發程序之陳述式而執行的觸發程序數目。DML 和 DDL 觸發程序利用 TRIGGER_NESTLEVEL 來判斷目前的巢狀層級。
-
object_id
-
這是觸發程序的物件識別碼。如果指定 object_id,就會傳回針對陳述式而執行之指定觸發程序的次數。如果未指定 object_id,就會傳回針對陳述式而執行之所有觸發程序的次數。
-
'trigger_type'
-
指定是否將 TRIGGER_NESTLEVEL 套用在 AFTER 觸發程序或 INSTEAD OF 觸發程序。指定 AFTER 表示 AFTER 觸發程序。指定 IOT 表示 INSTEAD OF 觸發程序。如果指定了 trigger_type,您也必須指定 trigger_event_category。
-
'trigger_event_category'
-
指定是否將 TRIGGER_NESTLEVEL 套用在 DML 或 DDL 觸發程序。指定 DML 表示 DML 觸發程序。指定 DDL 表示 DDL 觸發程序。如果指定了 trigger_event_category,您也必須指定 trigger_type。請注意,只有 AFTER 可以指定 DDL,因為 DDL 觸發程序只能是 AFTER 觸發程序。
A. 測試特定 DML 觸發程序的巢狀層級
IF ( (SELECT TRIGGER_NESTLEVEL( OBJECT_ID('xyz') , 'AFTER' , 'DML' ) ) > 5 )
RAISERROR('Trigger xyz nested more than 5 levels.',16,-1)
B. 測試特定 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. 測試所有執行之觸發程序的巢狀層級
IF ( (SELECT trigger_nestlevel() ) > 5 )
RAISERROR
('This statement nested over 5 levels of triggers.',16,-1)
顯示:

