TRIGGER_NESTLEVEL(Transact-SQL)

트리거를 발생시킨 문에 대해 실행된 트리거의 수를 반환합니다. 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 트리거에만 사용할 수 있으므로 DDL에는 AFTER만 함께 지정할 수 있습니다.

주의

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

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

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

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

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

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

2. 특정 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)

3. 실행한 모든 트리거의 중첩 수준 테스트

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

참고 항목

참조