처음으로 게시물을 작성하십시오 ...SQL Server : 업데이트 트랜잭션이 트리거에서 발생했는지 여부를 지정하는 옵션?
테이블이 업데이트되거나 행이 삽입 될 때 하나의 열을 업데이트해야하므로 트리거 (AFTER INSERT, UPDATE
)가 생성되었습니다. 문제는 삽입에 업데이트 문이 포함되어 트리거가 다시 실행된다는 사실 때문에 재귀 적이라는 것입니다.
또한 두 개의 서로 다른 트리거로 INSERT
및 UPDATE
을 분리하려고했지만, 대신에 다른 트리거가 있기 때문에 나는 때문에 상자 응용 프로그램 기본값 중에, sp_settriggerorder()
및 trigger_nestlevel()
와 함께 문제로 실행했습니다.
내 질문은 업데이트가 응용 프로그램 자체 또는 내 트리거에서 온 여부는 IF 절 진술을 사용할 수있는 방법이있다? 케이스, 그것이 내 방아쇠 인 경우, 내가 돌아가는 경우에 쉽게 ELSE 할 수 있고, 더 이상 재귀 적이 될 수 없습니다.
CREATE TRIGGER [dbo].[JobCardMetlInsertUpdateItemDesc]
ON [dbo].[JobCardMetl] AFTER INSERT
AS
BEGIN TRANSACTION [Description]
UPDATE JobCardMetl
SET JobCardMetl.Description = item.Description
FROM JobCardMetl
INNER JOIN item ON JobCardMetl.Item = item.item
WHERE JobCardMetl.RecordDate = (SELECT MAX(JobCardMetl.RecordDate)
FROM JobCardMetl)
COMMIT TRANSACTION [Description]
트리거 재귀 (트리거 직접 트리거 자체)는 데이터베이스 또는 서버 (?) 수준에서 비활성화 될 수 있습니다. 물론 그것은 모든 것에 영향을 미친다. – RBarryYoung