다음을 통해 공유


TRIGGER_NESTLEVEL(Transact-SQL)

적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance

트리거를 발생시킨 문에 대해 실행된 트리거의 수를 반환합니다. TRIGGER_NESTLEVEL는 DML 및 DDL 트리거에서 현재 중첩 수준을 확인하는 데 사용됩니다.

Transact-SQL 구문 표기 규칙

구문

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

인수

object_id
트리거의 개체 ID입니다. object_id가 지정된 경우 해당 문에 대해 지정한 트리거의 실행 횟수가 반환됩니다. object_id가 지정되지 않은 경우 문에 대한 모든 트리거의 실행 횟수가 반환됩니다.

' trigger_type '
TRIGGER_NESTLEVEL을 AFTER 트리거에 적용할지 아니면 INSTEAD OF 트리거에 적용할지를 지정합니다. AFTER 트리거의 경우 AFTER를 지정하며 INSTEAD OF 트리거의 경우 IOT를 지정합니다. trigger_type이 지정된 경우에는 trigger_event_category도 지정해야 합니다.

' trigger_event_category '
TRIGGER_NESTLEVEL을 DML 또는 DDL 트리거 중 어디에 적용할지를 지정합니다. DML 트리거에 대해 DML을 지정하며 DDL 트리거에는 DDL을 지정합니다. trigger_event_category가 지정된 경우에는 trigger_type도 지정해야 합니다. DDL 트리거는 AFTER 트리거만 가능하므로 AFTERDDL을 함께 지정할 수 있습니다.

설명

매개 변수를 지정하지 않은 경우 TRIGGER_NESTLEVEL은 호출 스택에 있는 총 트리거 수를 반환합니다. 여기에는 해당 트리거도 포함됩니다. 트리거가 다른 트리거를 발생시키면서 명령을 실행하거나 트리거를 연속적으로 발생시키는 경우 매개 변수를 생략할 수 있습니다.

호출 스택에서 특정 트리거 형식 및 이벤트 범주에 대한 총 트리거 수를 반환하려면 object_id = 0을 지정합니다.

TRIGGER_NESTLEVEL는 트리거 밖에서 실행되고 모든 매개 변수가 NULL이 아닌 경우 0을 반환합니다.

명시적으로 NULL로 지정된 매개 변수가 있는 경우 TRIGGER_NESTLEVEL가 사용된 위치가 트리거 내부이든 외부이든 관계없이 NULL이 반환됩니다.

예제

A. 특정 DML 트리거의 중첩 수준 테스트

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

B. 특정 DML 트리거의 중첩 수준 테스트

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)  

관련 항목

CREATE TRIGGER(Transact-SQL)