2011-01-07 4 views
1

에 새 레코드를 삽입하는 tableA에 UPDATE 트리거가 있습니다.SQL 서버 트리거 실행

CREATE TRIGGER insertIntoTableB 
ON tableA 
FOR UPDATE 
AS 
    INSERT INTO tableB (...) VALUES (...) 
GO 

다음으로이 문장을 순차적으로 실행하십시오. 두 번째 UPDATE 문 (UPDATE tableB)이 제대로 작동합니까? 업데이트가 순차적으로 다음의 예 UPDATE 트리거로 부호화하는 경우

UPDATE tableA 
SET ... 
WHERE key = 'some key' 

UPDATE tableB 
SET ... 
WHERE key = 'newly inserted key from trigger' 

답변

2

동작이 nested triggers 서버 구성 될, Using Nested Triggers 참조 : 트리거가 다른 트리거를 개시하는 동작을 수행 할 때

DML 및 DDL 트리거 모두 중첩된다. 이러한 작업은 등의 다른 트리거를 시작할 수 있습니다. DML 및 DDL 트리거는 최대 32 레벨 중첩 된 이 될 수 있습니다. AFTER 트리거가 nested triggers 서버 구성 옵션을 통해 중첩 된 일 수 있는지 여부를 제어 할 수 있습니다. INSTEAD OF 트리거 (DML 트리거는 INSTEAD OF 트리거 일 수 있음)는이 설정과 관계없이 중첩 될 수 있습니다.

테이블 A의 트리거가 실행되고 트리거 테이블 B 내부가 업데이트되면 테이블 B의 트리거가 즉시 실행됩니다. 테이블 A 트리거는 이 아니기 때문에이 끝나고 UPDATE 문이 끝날 때까지 기다리지 못하며 테이블 B 트리거가 끝날 때까지 대기합니다. 그러나 테이블 A의 업데이트는 이미 발생했습니다 (AFTER 트리거가 정상적인 경우). 테이블 B의 트리거 에서 테이블 A를 쿼리하면 업데이트가 표시됩니다.

+0

미안 내가 처음에 명확하지 않을 수 있습니다,하지만 단 하나의 방아쇠가 있으며 tableA에 따라, 나는 내 게시물을 적절하게 업데이 트했습니다 –

+1

참조하십시오. 첫 번째 업데이트 문은 트리거가 반환되기 전에 완료되지 않습니다. 두 번째 UPDATE 실행이 시작될 때 이전에 실행 된 모든 트리거를 포함하여 모든 문이 완료되었음을 100 % 보장합니다. –

+0

우수합니다. 감사합니다. –

1

(즉 완전히 실행 테이블 A에 트리거를 기다릴).

+0

테이블 A의 UPDATE 트리거에는 단일 INSERT INTO tableB 문과 위의 UPDATE tableA 및 UPDATE tableB 문이 순차적으로 실행됩니다. –

+0

나는 괜찮을 것이라고 생각합니다. 가장 좋은 것은 테스트하는 것입니다. – diagonalbatman

+0

멋진 감사합니다,뿐만 아니라 테스트합니다 –