첫 번째 및 마지막 트리거 지정
적용 대상:SQL ServerAzure SQL 데이터베이스Azure SQL Managed Instance
테이블과 연결된 AFTER 트리거 중 하나를 각 INSERT, DELETE 및 UPDATE 트리거 동작에 대한 첫 번째 AFTER 트리거나 마지막 AFTER 트리거로 지정할 수 있습니다. 첫 번째 트리거와 마지막 트리거 사이에 발생하는 AFTER 트리거는 정의되지 않은 순서로 실행됩니다.
AFTER 트리거의 순서를 지정하려면 sp_settriggerorder 저장 프로시저를 사용합니다. sp_settriggerorder에는 다음과 같은 옵션이 있습니다.
옵션 | 설명 |
---|---|
첫째 | DML 트리거를 트리거 동작에 대해 실행할 첫 번째 AFTER 트리거로 지정합니다. |
마지막 | DML 트리거를 트리거 동작에 대해 실행할 마지막 AFTER 트리거로 지정합니다. |
없음 | DML 트리거를 실행해야 하는 특정 순서가 없음을 명시합니다. 트리거를 첫 번째 또는 마지막에서 재설정하는 데 주로 사용됩니다. |
다음 예에서는 sp_settriggerorder를 사용하는 방법을 보여줍니다.
sp_settriggerorder @triggername = 'MyTrigger', @order = 'first', @stmttype = 'UPDATE'
Important
첫 번째 트리거와 마지막 트리거는 두 개의 서로 다른 DML 트리거여야 합니다.
한 테이블에 INSERT, UPDATE 및 DELETE 트리거를 동시에 정의할 수 있습니다. 각 문 형식에는 고유한 첫 번째 트리거와 마지막 트리거가 있을 수 있지만 동일한 트리거일 수는 없습니다.
테이블에 대해 정의된 첫 번째 또는 마지막 트리거가 FOR UPDATE, FOR DELETE 또는 FOR INSERT를 다루지 않는 등, 트리거 작업을 포함하지 않는 경우 누락된 작업에 대한 첫 번째 또는 마지막 트리거는 없습니다.
INSTEAD OF 트리거는 첫 번째 또는 마지막 트리거로 지정할 수 없습니다. INSTEAD OF 트리거는 기본 테이블에 대한 업데이트가 이루어지기 전에 실행됩니다. 기본 테이블에 대한 INSTEAD OF 트리거로 업데이트가 이루어지는 경우, 테이블에 정의된 AFTER 트리거가 실행되기 전에 업데이트가 발생합니다. 예를 들어 뷰의 INSTEAD OF INSERT 트리거가 기본 테이블에 데이터를 삽입하고 기본 테이블 자체에 한 개의 INSTEAD OF INSERT 트리거와 세 개의 AFTER INSERT 트리거가 있는 경우 삽입 동작 대신 기본 테이블의 INSTEAD OF INSERT 트리거가 실행되고 기본 테이블의 AFTER 트리거는 기본 테이블의 삽입 작업 후에 실행됩니다. 자세한 내용은 DML Triggers을 참조하세요.
ALTER TRIGGER 문이 첫 번째 또는 마지막 트리거를 변경하면 첫 번째 또는 마지막 특성이 삭제되고 주문 값이 없음으로 설정됩니다. 순서는 sp_settriggerorder를 사용하여 다시 설정해야 합니다.
OBJECTPROPERTY 함수는 ExecIsFirstInsertTrigger, ExecIsFirstUpdateTrigger, ExecIsFirstDeleteTrigger, ExecIsLastInsertTrigger, ExecIsLastUpdateTrigger및 ExecIsLastDeleteTrigger속성을 사용하여 트리거가 첫 번째 또는 마지막 트리거인지 여부를 보고합니다.
복제 시 즉시 업데이트 구독이나 지연 업데이트 구독에 포함된 테이블에 대해 첫 번째 트리거가 자동으로 생성됩니다. 복제를 수행하려면 해당 트리거가 첫 번째 트리거여야 합니다. 복제 시 즉시 업데이트 구독이나 지연 업데이트 구독에 첫 번째 트리거가 있는 테이블을 포함하려고 하면 오류가 발생합니다. 테이블이 구독에 포함된 후 트리거를 첫 번째 트리거로 만들려고 하면 sp_settriggerorder 오류가 반환됩니다. 복제 트리거에 ALTER를 사용하거나 sp_settriggerorder 를 사용하여 복제 트리거를 마지막 트리거나 없음 트리거로 변경하면 구독이 제대로 작동하지 않게 됩니다.
참고 항목
OBJECTPROPERTY(Transact-SQL)
sp_settriggerorder(Transact-SQL)