문제

나는 트리거가 취한 작업이 다른 트리거를 발사 할 수 있도록 (또는 그렇지 않은) 서버 설정에 대해 알고 있으며, 이해할 수 있듯이 내 유일한 옵션은 사실입니다 (다른 트리거를 발사 할 수있는 트리거가 가능합니다. 끝없는 재귀로 이어짐) 또는 거짓 (트리거가 취한 조치는 다른 트리거를 발사하지 않아 예상치 못한 결과 또는 일관성없는 데이터로 이어질 수 있음).

SQL Server에서 "최대 트리거 깊이"를 시행하는 방법이 있습니까? 나는 2008 년을 사용하고 있다면, 중요한 경우 (또는 다른 RDBM의 기능을 알지 못하지만 내 지식이 확실히 제한되어 있지만). 예를 들어, 여기에 내가 원하는 것이 있습니다.

  1. "최대 트리거 깊이"를 "2"로 설정하십시오.
  2. 표 1에 행을 삽입합니다
  3. 표 1의 트리거는 표 2에 삽입된다
  4. 표 2의 트리거는 표 3에 삽입된다
  5. 표 4에 삽입되는 트리거가 있지만 최대 깊이가 2이기 때문에 트리거가 실행되지는 않지만 현재 "재귀 트리거 = False"동작과 일치하지 않습니다. 전체 인서트 세트가 롤백되고 "최대 트리거 깊이 (2) 초과 - 실패한 삽입"메시지 (이상)와 같은 오류로 실패합니다.

누군가가 이것이 가능하는지 또는이 동작에 대한 뛰어난 기능 요청이 있는지 아는 사람이 있습니까? 내가 미쳤고 이것이 행동에 대한 끔찍한 아이디어라면, 나는 그것에 열려 있지만, 왜 (의도하지 않은 결과 등) 이유를 알고 싶습니다.

도움이 되었습니까?

해결책

방아쇠 내부에서는 둥지 레벨을 확인하고 선택적으로 반환 할 수 있습니다.

IF (TRIGGER_NESTLEVEL() > 2)
    RETURN

이것 좀 봐 블로그 게시물 자세한 사항은.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top