sp_settriggerorder (Transact-sql)
SONRA Tetikleyiciler ilk ya da son harekete belirtir. Arasında ilk ve son tetikleyici harekete sonra Tetikleyiciler tanımsız sırayla çalıştırılır.
Transact-SQL Sözdizim Kuralları
Sözdizimi
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ı, varsa, sırasını ise ayarlanması veya değiştirilmesi için ait olduğu için. triggerschema**.**triggername is sysname. Adı bir tetikleyiciye uyuşmuyor veya bir INSTEAD of tetikleyici adı karşılık geliyorsa, yordamı bir hata döndürür. triggerschemaddl ya da logon tetikleyici belirtilemez.@order='value'
Yeni tetikleyici sırasını ayarıdır. valueise varchar(10)ve aşağıdaki değerlerden herhangi biri olabilir.Önemli İlk ve son Tetikleyiciler, iki farklı Tetikleyiciler olmalıdır.
Değer
Açıklama
First
Tetikleyici önce harekete geçirilir.
Last
Son tetikleyici harekete geçirilir.
Hiçbiri
Tetikleyici tanımlanmayan bir sırayla harekete geçirilir.
@stmttype='statement_type'
Tetik ateşlendiğinde sql deyimi belirtir. statement_typeise varchar(50)ve INSERT, update, delete, oturum açma veya herhangi olabilir Transact-SQLlistelenen deyimi olay ddl olayları. Olay grupları belirtilemez.Tetikleyici olarak belirlenebilir ilk veya son sadece bu tetikleyici deyimi türü için bir tetikleyici olarak tanımlandıktan sonra bir deyimi türü için tetikleyici. İstasyonla TR1 belirlenebilir ilk için Tablo Ekle T1 , TR1 ekleme tetikleyicisi tanımlanır. Veritabanı AltyapısıBir hata döndürür TR1, yalnızca ekleme tetikleyicisi, tanımlanmış olarak ayarlanmış bir ilk, veya son, tetikleyici için bir update deyimi. Daha fazla bilgi için, Yorumlar bölümüne bakın.
@ ad= { 'database' | 'Sunucu' | NULL}
Ne zaman triggernameddl tetikleyici olduğunu, belirtir olup olmadığını triggernameVeritabanı kapsam veya sunucu kapsamı ile oluşturulduğu. Eğer triggernamebir oturum açma tetikleyici olduğunu sunucusu belirtilmelidir. ddl tetikleyici kapsam hakkında daha fazla bilgi için bkz: ddl Tetikleyicileri. Belirtilmezse veya null belirtilirse, triggernamedml tetikleyici olur.
Dönüş Kodu Değerleri
0 (başarılı) ve 1 (hata)
Açıklamalar
dml Tetikleyicileri
Sadece biri olabilir ilk bir son için tek bir tabloda her deyimi tetikleyici.
Eğer bir ilk tetikleyici tablo, veritabanı veya sunucu üzerinde önceden tanımlı, yeni tetikleyici olarak belirleyemez ilk aynı tablo, veritabanı veya sunucu için aynı statement_type. Bu kısıtlama de geçerlidir son tetikler.
Çoğaltma, ilk tetikleyici bir hemen güncelleştirmek içinde bulunan veya kuyruğa alınmış güncelleştirme aboneliği herhangi bir tablo için otomatik olarak oluşturur. Çoğaltma, onun tetiği ilk tetikleyici olmasını gerektirir. Çoğaltma, bir anında güncelleme veya kuyruğa alınmış güncelleştirme aboneliği ile ilk tetikleyici tablo dahil etmeye çalıştığınızda hata yükseltir. Bir tablo bir abonelik için dahil edilmiştir sonra tetikleyici ilk tetikleyici yapmaya çalışırsanız, sp_settriggerorder bir hata döndürür. alter TETIKLEYICI üzerinde çoğaltma tetikleyicisi kullanın veya kullanmak sp_settriggerorder çoğaltma tetikleyicisini değiştirmek için bir son veya yok tetikleyici, abonelik değil işlevi doğru.
ddl Tetikleyicileri
Veritabanı kapsamlı ddl tetikleyici ddl tetikleyici sunucu kapsamı ile aynı olayı varsa, her iki Tetikleyiciler olmasını belirleyebilirsiniz bir ilk tetikleyici ya da bir son tetikleyici. Ancak, sunucu kapsamı Tetikleyiciler her zaman ilk yangın. Genel olarak, aynı olayı var ddl Tetikleyiciler yürütme sırası aşağıdaki gibidir:
Sunucu düzeyinde tetikleyici olarak işaretlenmiş ilk.
Diğer sunucu düzeyinde tetikler.
Sunucu düzeyinde tetikleyici olarak işaretlenmiş son.
Veritabanı düzeyinde tetikleyici olarak işaretlenmiş ilk.
Diğer veritabanı düzeyinde tetikler.
Veritabanı düzeyinde tetikleyici olarak işaretlenmiş son.
Tetikleyicilerle İlgili Genel Değerlendirmeler
Bir TETIKLEYICI alter deyimi ilk veya son tetikleyici değişirse ilk veya son aslında tetikleyecek özniteliği bırakılan ve değeri değiştirilir yok. Sipariş değeri kullanarak sıfırlanması gerekir sp_settriggerorder.
Aynı tetikleyici ilk ya da son sipariş birden deyimi türü olarak tasarlanması gerekir eğer sp_settriggerorder her deyimi türü için yürütülmelidir. Olarak belirlenebilir önce de, tetiği ilk deyimi türü için tanımlanmalıdır ilk veya son deyimi türü için yangın için tetikleyici.
İzinler
Sunucu kapsamı (on all server oluşturulan) veya bir oturum açma ile ddl tetikleyici sırasını ayarlamak için tetikleyici control server izni gerektirir.
(on database oluşturulan) veritabanı kapsamlı ddl tetikleyici sırasını ayarlamak için herhangi bir veritabanı ddl TETIKLEYICI alter izni gerektirir.
Bir dml sırasını ayarlamak için tetikleyici tablo veya Görünüm tetikleyici tanımlanmış alter izni gerektirir.
Örnekler
A.dml tetikleyici firing sırasını ayarlama
Aşağıdaki örnek, tetikleyici belirtir uSalesOrderHeadersonra yangına ilk tetikleyici olabilir bir UPDATEişlem meydana Sales.SalesOrderHeadertablo.
USE AdventureWorks2012;
GO
sp_settriggerorder @triggername= 'Sales.uSalesOrderHeader', @order='First', @stmttype = 'UPDATE';
USE AdventureWorks2012;
GO
sp_settriggerorder @triggername= 'Sales.uSalesOrderHeader', @order='First', @stmttype = 'UPDATE';
B.dml tetikleyici firing sırasını ayarlama
Aşağıdaki örnek, tetikleyici belirtir ddlDatabaseTriggerLogsonra yangına ilk tetikleyici olabilir bir ALTER_TABLEOlay ortaya AdventureWorks2012 veritabanı.
USE AdventureWorks2012;
GO
sp_settriggerorder @triggername= 'ddlDatabaseTriggerLog', @order='First', @stmttype = 'ALTER_TABLE', @namespace = 'DATABASE';
USE AdventureWorks2012;
GO
sp_settriggerorder @triggername= 'ddlDatabaseTriggerLog', @order='First', @stmttype = 'ALTER_TABLE', @namespace = 'DATABASE';
Ayrıca bkz.
Başvuru
Sistem saklı yordamları (Transact-sql)