TRIGGER_NESTLEVEL(Transact-SQL)
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance
트리거를 발생시킨 문에 대해 실행된 트리거의 수를 반환합니다. TRIGGER_NESTLEVEL는 DML 및 DDL 트리거에서 현재 중첩 수준을 확인하는 데 사용됩니다.
구문
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 트리거만 가능하므로 AFTER만 DDL을 함께 지정할 수 있습니다.
설명
매개 변수를 지정하지 않은 경우 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)