다음을 통해 공유


sp_settriggerorder(Transact-SQL)

업데이트: 2006년 12월 12일

첫 번째 또는 마지막으로 실행되는 AFTER 트리거를 지정합니다. 첫 번째와 마지막 트리거 사이에 실행되는 AFTER 트리거는 정의되지 않은 순서로 실행됩니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

sp_settriggerorder [ @triggername = ] '[ triggerschema. ] triggername' 
        , [ @order = ] 'value' 
        , [ @stmttype = ] 'statement_type' 
        [ , [ @namespace = ] { 'DATABASE' | 'SERVER' | NULL } ]

인수

  • [ @triggername= ] '[ triggerschema**.****] triggername**'**
    트리거 및 트리거가 속한 스키마의 이름입니다. 해당되는 경우 이 순서가 설정 또는 변경됩니다. [triggerschema**.**]triggernamesysname입니다. 이름이 트리거와 일치하지 않거나 INSTEAD OF 트리거와 일치하는 경우에는 프로시저가 오류를 반환합니다. DDL 또는 LOGON 트리거에 대해서는 triggerschema를 지정할 수 없습니다.
  • [ @order= ] 'value'
    트리거의 새 순서 설정입니다. value는 **varchar(10)**이며 다음 값 중 하나일 수 있습니다.

    ms186762.note(ko-kr,SQL.90).gif중요:
    First 트리거와 Last 트리거는 서로 달라야 합니다.
    설명

    First

    트리거가 첫 번째로 실행됩니다.

    Last

    트리거가 마지막으로 실행됩니다.

    None

    트리거가 정의되지 않은 순서로 실행됩니다.

  • [ @stmttype= ] 'statement_type'
    트리거를 발생시키는 SQL 문을 지정합니다. statement_type은 **varchar(50)**이며 INSERT, UPDATE, DELETE, LOGON 또는 DDL 트리거용 DDL 이벤트에 나와 있는 모든 Transact-SQL 문이 될 수 있습니다. 이벤트 그룹은 지정할 수 없습니다.

    트리거를 특정 문 유형의 First 또는 Last 트리거로 지정하려면 먼저 해당 트리거를 해당 문 유형의 트리거로 정의해야 합니다. 예를 들어 TR1이 INSERT 트리거로 정의되면 TR1 트리거를 T1 테이블에서 INSERT의 First 트리거로 지정할 수 있습니다. SQL Server 2005 데이터베이스 엔진은 INSERT 트리거로만 정의된 TR1이 UPDATE 문의 First 또는 Last 트리거로 설정되는 경우 오류를 반환합니다. 자세한 내용은 주의 섹션을 참조하십시오.

  • @namespace= { 'DATABASE' | 'SERVER' | NULL }
    triggername이 DDL 또는 LOGON 트리거인 경우 triggername이 데이터베이스 범위 또는 서버 범위에서 생성되었음을 지정합니다. LOGON 트리거는 서버 범위에서만 생성됩니다. DDL 트리거 범위에 대한 자세한 내용은 DDL 트리거 디자인을 참조하십시오. 지정하지 않거나 NULL을 지정한 경우 triggername은 DML 트리거입니다.

반환 코드 값

0(성공) 및 1(실패)

주의

한 테이블에는 각 문당 FirstLast 트리거가 하나씩만 허용됩니다.

테이블, 데이터베이스 또는 서버에서 First 트리거가 이미 정의된 경우 같은 테이블, 데이터베이스 또는 서버에서 같은 statement_type에 대해 새 트리거를 First로 지정할 수 없습니다. 이 제한은 Last 트리거에도 적용됩니다.

복제 시 즉시 구독 업데이트나 지연 구독 업데이트에 포함된 테이블에 대해 첫 번째 트리거가 자동으로 생성됩니다. 복제의 트리거는 첫 번째 트리거여야 합니다. 첫 번째 트리거가 있는 테이블을 즉시 구독 업데이트나 지연 구독 업데이트에 포함시키면 복제 시 오류가 발생합니다. 테이블이 구독에 포함된 다음 트리거를 첫 번째 트리거로 만들면 sp_settriggerorder에서 오류를 반환합니다. 복제 트리거에서 ALTER TRIGGER를 사용하거나 sp_settriggerorder를 사용하여 복제 트리거를 Last 트리거나 None 트리거로 변경하면 구독이 제대로 작동하지 않습니다.

ALTER TRIGGER 문이 첫 번째 또는 마지막 트리거를 변경할 경우 원래 트리거에 설정되었던 First 또는 Last 특성은 삭제되고 값이 None으로 대체됩니다. 순서 값은 sp_settriggerorder로 다시 설정해야 합니다.

같은 트리거를 둘 이상의 문 유형에서 첫 번째 또는 마지막 순서로 지정해야 하는 경우 각 문 유형에 대해 sp_settriggerorder를 실행해야 합니다. 또한 트리거를 먼저 문 유형에 대해 정의해야만 해당 문 유형에 대해 First 또는 Last 트리거로 실행하도록 지정할 수 있습니다.

사용 권한

서버 범위(모든 서버에 생성됨)에서 DDL 또는 LOGON 트리거 순서를 설정하려면 CONTROL SERVER 권한이 필요합니다.

데이터베이스 범위(데이터베이스에 생성됨)에서 DDL 트리거 순서를 설정하려면 ALTER ANY DATABASE DDL TRIGGER 권한이 필요합니다.

DML 트리거 순서를 설정하려면 트리거가 정의된 테이블 또는 뷰에 대한 ALTER 권한이 필요합니다.

1. DML 트리거의 실행 순서 설정

다음 예에서는 uSalesOrderHeader 트리거를 Sales.SalesOrderHeader 테이블에서 UPDATE 작업이 발생한 후 실행되는 첫 번째 트리거로 지정합니다.

USE AdventureWorks;
GO
sp_settriggerorder @triggername= 'Sales.uSalesOrderHeader', @order='First', @stmttype = 'UPDATE';

2. DDL 트리거의 실행 순서 설정

다음 예에서는 ddlDatabaseTriggerLog 트리거를 AdventureWorks 데이터베이스에서 ALTER_TABLE 이벤트가 발생한 후 실행되는 첫 번째 트리거로 지정합니다.

USE AdventureWorks;
GO
sp_settriggerorder @triggername= 'ddlDatabaseTriggerLog', @order='First', @stmttype = 'ALTER_TABLE', @namespace = 'DATABASE';

참고 항목

참조

시스템 저장 프로시저(Transact-SQL)
데이터베이스 엔진 저장 프로시저(Transact-SQL)
ALTER TRIGGER(Transact-SQL)

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2006년 12월 12일

새로운 내용
  • SQL Server 2005 서비스 팩 2에서 도입된 LOGON 트리거에 대한 정보를 항목 전체에 추가했습니다.