FOR와 AFTER 트리거의 차이점은 무엇입니까?


답변:


153

차이는 없습니다. 그들은 같은 일을합니다.

CREATE TRIGGER trgTable on dbo.Table FOR INSERT,UPDATE,DELETE

와 같다

CREATE TRIGGER trgTable on dbo.Table AFTER INSERT,UPDATE,DELETE

INSTEAD OF트리거 다르고 이전 대신 인서트의 화재 및 기본 테이블에 해당하는 값을 삽입하기 위해 뷰에 사용될 수있다.


14
트리거를 사용하여 뷰에 삽입하는 것에 대한 의견이 마음에 들었습니다. 매우 유용한 정보. 건배.
Mariusz

죄송합니다 @Ben 씨, 뷰 에 삽입 하는 시나리오는 무엇입니까 ? 감사합니다 ^-^
Jeancarlo Fontalvo

@JeancarloFontalvo, 1) 호환성. 보기가 동일하게 유지되는 경우 기본 테이블이 변경 될 수 있습니다. 2) 액세스 제어, 특정 사용자는 특정 열에 만 쓰기 권한이있을 수 있습니다.
Ben

17

@Ben 은 절대적으로 옳습니다.

다음은 MSDN 문서 SQL Server 트리거 탐색입니다.

기사의 단락 :

이 구문은 이전 버전의 SQL Server에서도 사용할 수 있습니다. 그러나 SQL Server 2000에는 두 가지 유형의 트리거가 있으므로 FOR 트리거를 AFTER 트리거라고 부르는 것을 선호합니다. 따라서이 기사의 나머지 부분에서는 AFTER 또는 INSTEAD OF 트리거를 참조합니다.

앞에서 본 AFTER 트리거와 마찬가지로이 트리거는 lastname 필드가 변경되지 않도록합니다. 그러나 이전 예제와는 다르게이 비즈니스 규칙을 구현합니다. INSTEAD OF 트리거가 UPDATE 문 대신 실행되기 때문에 INSTEAD OF 트리거는 비즈니스 규칙 테스트가 통과하는지 여부를 평가합니다. 비즈니스 규칙 테스트가 통과하면 업데이트가 발생하기 위해 INSTEAD OF 트리거가 명시 적으로 UPDATE 문을 다시 호출해야합니다.


4

AFTER는 트리거링 SQL 문에 지정된 모든 작업이 성공적으로 실행 된 경우에만 DML 트리거가 실행되도록 지정합니다. 이 트리거가 실행되기 전에 모든 참조 계단식 작업 및 제약 조건 검사도 성공해야합니다. FOR가 지정된 유일한 키워드 인 경우 AFTER가 기본값입니다.

AFTER 트리거는 뷰에서 정의 할 수 없습니다.

INSTEAD OF 트리거 SQL 문 대신 DML 트리거가 실행되도록 지정하여 트리거 문의 작업을 무시합니다. INSTEAD OF는 DDL 또는 로그온 트리거에 대해 지정할 수 없습니다.

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql


1
이 구문 "AFTER는 FOR가 지정된 유일한 키워드 일 때 기본값입니다." 매우 혼란 스럽습니다. 그들은 그것을 더 잘 표현할 수있었습니다.
FMFF
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.