집 >데이터 베이스 >MySQL 튜토리얼 >SQL Server에서 재귀 트리거를 방지하려면 어떻게 해야 합니까?
SQL Server 2008에서 tblMedia 테이블의 트리거 [dbo].[tblMediaAfterInsertOrUpdate]가 실수로 재귀 동작을 유발합니다. 이 동작은 트리거가 트리거된 후 자체적으로 트리거될 때 발생합니다.
문제를 이해하려면 트리거를 살펴보겠습니다.
ALTER TRIGGER [dbo].[tblMediaAfterInsertOrUpdate] ON [dbo].[tblMedia] BEFORE INSERT, UPDATE AS BEGIN ...
삽입 또는 업데이트 후: 삽입 또는 업데이트가 커밋되기 전에 트리거가 실행됩니다.
재귀 가능성: 트리거 내부의 업데이트 문은 tblMedia 테이블을 수정하려고 시도합니다. 이 수정으로 인해 동일한 트리거가 다시 트리거되어 무한 루프가 발생할 수 있습니다.
재귀 방지: 이러한 재귀 동작을 방지하려면 TRIGGER_NESTLEVEL() 함수를 사용하여 중첩 수준을 확인할 수 있습니다. 방아쇠의. 중첩 수준이 1보다 큰 경우 트리거는 다른 트리거에 의해 호출되므로 건너뛰어야 합니다.
ALTER TRIGGER [dbo].[tblMediaAfterInsertOrUpdate] ON [dbo].[tblMedia] BEFORE INSERT, UPDATE AS BEGIN IF TRIGGER_NESTLEVEL() <= 1 /* Prevent recursion */ BEGIN ... END END
설명:
이 검사를 트리거에 통합함으로써 무한 반복을 방지하고 필요한 데이터 수정이 한 번만 수행되도록 보장합니다.
위 내용은 SQL Server에서 재귀 트리거를 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!