Share via


sp_settriggerorder (Transact-SQL)

Ilk veya son harekete AFTER Tetikleyiciler belirtir.Ilk ve son Tetikleyiciler arasında tetikleyen AFTER Tetikleyicileri tanımsız bir sırayla çalıştırılır.

Topic link iconTransact-SQL sözdizimi kuralları

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

Bağımsız değişkenler

  • [ @triggername= ] '[ triggerschema**.] triggername'**
    Tetikleyici ve şema adı da, uygulamadaysa, sırasını, ayarlamak veya değiştirilmiş olan ait olduğu.[triggerschema**.**]triggername is sysname.If the name does not correspond to a trigger or if the name corresponds to an INSTEAD OF trigger, the procedure returns an error.triggerschema cannot be specified for DDL or logon triggers.

  • [ @order= ] 'value'
    Is the setting for the new order of the trigger.value is varchar(10) and it can be any one of the following values.

    Important noteImportant Note:

    The First and Last triggers must be two different triggers.

    Değer

    Açıklama

    First

    Tetikleyici önce harekete geçirilir.

    Last

    Son tetikleyici harekete geçirilir.

    None

    Tanımsız bir sırayla, tetikleyici harekete geçirilir.

  • [ @stmttype= ] 'statement_type'
    Specifies the SQL statement that fires the trigger.statement_type is varchar(50) and can be INSERT, UPDATE, DELETE, LOGON, or any Transact-SQL statement event listed in DDL olayları.Olay grupları belirtilemez.

    Tetikleyici olarak belirlenebilir Birinci or Son tetikleyici olarak deyim türü için bir tetikleyici, tetikleyici yalnızca tanımlandıktan sonra bir deyim türü.Örneğin, tetikleyici TR1 belirlenebilir.Birinci temel tablo için INSERTT1 if TR1 bir INSERT tetikleyicisi tanımlanır.The Database Engine returns an error if TR1, which has been defined only as an INSERT trigger, is küme as a First, or Last, trigger for an UPDATE deyim.Daha fazla bilgi için Açıklamalar bölümüne bakın.

  • @namespace= { 'DATABASE' | 'SERVER' | NULL }
    Ne zaman triggername DDL bir tetik, belirtir mi triggername Veritabanı kapsam veya sunucu kapsamı ile oluşturuldu. If triggername bir oturum açma Tetik SERVER belirtilmeli. DDL tetikleyicisi kapsam hakkında daha fazla bilgi için bkz: Tasarlama DDL Tetikleyicileri. Belirtilmedi veya null ise, belirtilen triggername DML tetikleyicisi olur.

Dönüş Kodu Değerleri

0 (başarılı) ve 1 (hata)

Remarks

DML Tetikleyicileri

Olabilir yalnızca bir Birinci and one Son tetikleyici tek bir tabloda, her tablo için.

Varsa bir Birinci tetikleyici, tablo, veritabanı veya sunucu zaten tanımlandı, size yeni bir tetikleyici belirleyemez Birinci aynı tablo, veritabanı veya sunucu için aynı statement_type. Ayrıca, bu sınırlama uygular Son tetikler.

Çoğaltma, otomatik olarak ilk tetikleyici için bir anında güncelleştirilirken eklenir veya güncelleştiren bir abonelik sıraya herhangi bir tablo oluşturur.Çoğaltma ilk tetikleyici, tetikleyici olması gerekir.Çoğaltma ilk tetikleyici içeren bir tablo bir anında güncelleme veya kuyruğa alınmış güncelleştirme dahil çalıştığınızda bir hata harekete geçiren abonelik.Bir tablo, içerdiği yüklendikten sonra ilk tetikleyici tetikleyici yapmaya çalışırsanız bir abonelik, sp_settriggerorder hata verir.ALTER TRIGGER üzerinde çoğaltma tetikleyicisi kullanın veya kullanın sp_settriggerorder çoğaltma tetikleyicisi değiştirmek içinSon or Yok tetikleyici, aboneliğin düzgün çalışmıyor.

DDL Tetikleyicileri

Veritabanı kapsamlı bir DDL tetikleyicisi DDL tetikleyici sunucu kapsamı ile aynı varsa olay, her iki Tetikleyicileri olacağını belirtebilirsiniz bir Birinci tetikleyicisi ya daSon tetikleyicisi.Ancak, sunucu kapsamlı Tetikleyicileri önce her zaman harekete.Genel olarak, aynı olayda mevcut DDL Tetikleyicileri yürütülmesini sırası şöyledir:

  1. Sunucu-düzey işaretlenmiş tetikleyicisi Birinci.

  2. Diğer sunucu-düzey tetikler.

  3. Sunucu düzeyinde tetikleyicisi işaretlendi. Son.

  4. Işaretlenen veritabanı düzey tetikleyicisi Birinci.

  5. Diğer veritabanı düzey tetikler.

  6. Işaretlenen veritabanı düzey tetikleyicisi Son.

Genel tetikleyicisi konuları

ALTER TRIGGER deyim ilk veya son tetikleyicisi değişirse Birinci or Son özniteliği başlangıçta küme üzerinde tetikleyici bırakılır ve değeri değiştirilir tarafındanYok.Sipariş değeri olarak sıfırlanması gerekir sp_settriggerorder.

Aynı tetikleyici ilk veya son sipariş için birden çok deyim türü olarak işaretlenmesi gerekir, sp_settriggerorder her deyim türü için yürütülmelidir.Olarak belirlenebilir önce Ayrıca, tetikleyicinin ilk deyim türü tanımlanmalıdır Birinci or Son tetikleyicisi için bu deyim türü baþlatmak için.

İzinler

Için küme DDL tetikleyicisi sunucu kapsamlı (ON ALL SERVER oluşturulur) veya oturum açma tetikleyici sırasını, DENETIM SERVER iznine gerek duyar.

Için küme DDL tetikleyici (ON DATABASE oluşturulan) veritabanı kapsamlı sırasını, ALTER ANY DATABASE DDL TRIGGER iznine gerek duyar.

Bir DML sırasını ayarlamak için tabloyu veya görünümü tetikleyici tanımlanmış ALTER iznine tetikleyicisi gerektirir.

Örnekler

C.DML tetikleyicisi firing sırasını ayarlama

Aşağıdaki örnek, tetikleyici belirtir. uSalesOrderHeader sonra baþlatmak için ilk tetikleyici gibi bir UPDATE işlem oluşur Sales.SalesOrderHeader TABLO.

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

b.DDL tetikleyicisi firing sırasını ayarlama

Aşağıdaki örnek, tetikleyici belirtir. ddlDatabaseTriggerLog sonra baþlatmak için ilk tetikleyici gibi bir ALTER_TABLE Olay oluşuyor AdventureWorks Veritabanı.

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