첫 번째 및 마지막 트리거 지정Specify First and Last Triggers

테이블과 연결된 AFTER 트리거 중 하나를 각 INSERT, DELETE 및 UPDATE 트리거 동작에 대한 첫 번째 AFTER 트리거나 마지막 AFTER 트리거로 지정할 수 있습니다.You can specify that one of the AFTER triggers associated with a table be either the first AFTER trigger or the last AFTER trigger that is fired for each INSERT, DELETE, and UPDATE triggering actions. 첫 번째 트리거와 마지막 트리거 사이에 실행되는 AFTER 트리거는 정의되지 않은 순서로 실행됩니다.The AFTER triggers that are fired between the first and last triggers are executed in undefined order.

AFTER 트리거의 순서를 지정하려면 sp_settriggerorder 저장 프로시저를 사용합니다.To specify the order for an AFTER trigger, use the sp_settriggerorder stored procedure. sp_settriggerorder 에는 다음과 같은 옵션이 있습니다.sp_settriggerorder has the following options.

옵션Option 설명Description
첫째First DML 트리거를 트리거 동작에 대해 실행할 첫 번째 AFTER 트리거로 지정합니다.Specifies that the DML trigger is the first AFTER trigger fired for a triggering action.
마지막Last DML 트리거를 트리거 동작에 대해 실행할 마지막 AFTER 트리거로 지정합니다.Specifies that the DML trigger is the last AFTER trigger fired for a triggering action.
없음None DML 트리거가 실행되는 특정 순서가 없음을 지정합니다.Specifies that there is no specific order in which the DML trigger should be fired. 주로 첫 번째 트리거나 마지막 트리거를 다시 설정하는 데 사용됩니다.Used mainly to reset a trigger from being either first or last.

다음 예에서는 sp_settriggerorder를 사용하는 방법을 보여 줍니다.The following example shows using sp_settriggerorder:

sp_settriggerorder @triggername = 'MyTrigger', @order = 'first', @stmttype = 'UPDATE'  

중요

첫 번째 트리거와 마지막 트리거는 서로 다른 DML 트리거여야 합니다.The first and last triggers must be two different DML triggers.

한 테이블에 INSERT, UPDATE 및 DELETE 트리거를 동시에 정의할 수 있습니다.A table can have INSERT, UPDATE, and DELETE triggers defined on it at the same time. 문 유형마다 자체의 첫 번째 트리거와 마지막 트리거가 있을 수 있지만 두 트리거가 서로 달라야 합니다.Each statement type can have its own first and last triggers, but they cannot be the same triggers.

테이블에 정의된 첫 번째 트리거나 마지막 트리거가 FOR UPDATE, FOR DELETE 또는 FOR INSERT에 적용되지 않는 경우와 같이 특정 트리거 동작에 적용되지 않으면 이렇게 누락된 작업에 대한 첫 번째 트리거나 마지막 트리거는 없습니다.If the first or last trigger defined for a table does not cover a triggering action, such as not covering FOR UPDATE, FOR DELETE, or FOR INSERT, there is no first or last trigger for the missing actions.

첫 번째 트리거나 마지막 트리거로 INSTEAD OF 트리거를 지정할 수 없습니다.INSTEAD OF triggers cannot be specified as first or last triggers. INSTEAD OF 트리거는 기본 테이블이 업데이트되기 전에 시작됩니다.INSTEAD OF triggers are fired before updates are made to the underlying tables. 기본 테이블이 INSTEAD OF 트리거에 의해 업데이트될 경우 테이블에 정의된 AFTER 트리거가 실행되기 전에 업데이트가 수행됩니다.If updates are made by an INSTEAD OF trigger to underlying tables, the updates occur before any AFTER triggers defined on the table are fired. 예를 들어 뷰의 INSTEAD OF INSERT 트리거가 기본 테이블에 데이터를 삽입하고 기본 테이블 자체에 한 개의 INSTEAD OF INSERT 트리거와 세 개의 AFTER INSERT 트리거가 있는 경우 삽입 동작 대신 기본 테이블의 INSTEAD OF INSERT 트리거가 실행되고 기본 테이블의 AFTER 트리거는 기본 테이블의 삽입 작업 후에 실행됩니다.For example, if an INSTEAD OF INSERT trigger on a view inserts data into a base table and the base table itself contains an INSTEAD OF INSERT trigger and three AFTER INSERT triggers, the INSTEAD OF INSERT trigger on the base table is fired instead of the inserting action, and the AFTER triggers on the base table are fired after any inserting action on the base table. 자세한 내용은 DML Triggers을 참조하세요.For more information, see DML Triggers.

ALTER TRIGGER 문에 의해 첫 번째 트리거나 마지막 트리거가 변경되는 경우 첫 번째마지막 특성이 삭제되고 순서 값은 없음으로 설정됩니다.If an ALTER TRIGGER statement changes a first or last trigger, the First or Last attribute is dropped and the order value is set to None. 순서는 sp_settriggerorder를 사용하여 다시 설정해야 합니다.The order must be reset by using sp_settriggerorder.

OBJECTPROPERTY 함수의 ExecIsFirstTriggerExecIsLastTrigger속성을 통해 트리거가 첫 번째 트리거인지 또는 마지막 트리거인지 알 수 있습니다.The OBJECTPROPERTY function reports whether a trigger is a first or last trigger by using the properties ExecIsFirstTrigger and ExecIsLastTrigger.

복제 시 즉시 업데이트 구독이나 지연 업데이트 구독에 포함된 테이블에 대해 첫 번째 트리거가 자동으로 생성됩니다.Replication automatically generates a first trigger for any table that is included in an immediate updating or queued updating subscription. 복제의 트리거는 첫 번째 트리거여야 합니다.Replication requires that its trigger be the first trigger. 첫 번째 트리거가 있는 테이블을 즉시 업데이트 구독이나 지연 업데이트 구독에 포함시키면 복제 시 오류가 발생합니다.Replication raises an error when you try to include a table with a first trigger in an immediate updating or queued updating subscription. 테이블이 구독에 포함된 후 트리거를 첫 번째 트리거로 만들려고 하면 sp_settriggerorder 에서 오류가 반환됩니다.If you try to make a trigger a first trigger after a table has been included in a subscription, sp_settriggerorder returns an error. 복제 트리거에 ALTER를 사용하거나 sp_settriggerorder 를 사용하여 복제 트리거를 마지막 트리거나 없음 트리거로 변경하면 구독이 제대로 작동하지 않게 됩니다.If you use ALTER on the replication trigger or use sp_settriggerorder to change the replication trigger to a last or none trigger, the subscription will not function correctly.

참고 항목See Also

OBJECTPROPERTY(Transact-SQL) OBJECTPROPERTY (Transact-SQL)
sp_settriggerorder(Transact-SQL) sp_settriggerorder (Transact-SQL)