Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
İlk veya son ateşlenen tetikleri belirtir AFTER .
AFTER İlk ve son tetik arasında ateşlenen tetikleyiciler belirsiz sırayla çalıştırılır.
Transact-SQL söz dizimi kuralları
Sözdizimi
sp_settriggerorder
[ @triggername = ] N'triggername'
, [ @order = ] 'order'
, [ @stmttype = ] 'stmttype'
[ , [ @namespace = ] 'DATABASE' | 'SERVER' | NULL ]
[ ; ]
Arguments
[ @triggername = ] N'triggername'
Tetikleyicinin adı ve ait olduğu şema, eğer uygunsa, hangi sıranın ayarlanması veya değiştirileceği.
@triggername , varsayılan olmayan nvarchar(517)'dir ve [ trigger_schema . ] trigger_name formatındadır. Eğer isim tetikleyiciye karşılık gelmiyorsa veya isim tetikleyiciye INSTEAD OF karşılık geliyorsa, prosedür hata döndürür. DDL veya giriş tetikleyicileri için bir şema belirtilemez.
[ @order = ] 'düzen'
Tetikleyicinin yeni sırası için ayar. @ordervarchar(10)'dur ve aşağıdaki değerlerden herhangi biri olabilir.
| Değer | Description |
|---|---|
First |
Tetik önce ateşlenir. |
Last |
Tetik en son ateşlenir. |
None |
Tetik belirsiz bir sırayla ateşlenir. |
Önemli
ve FirstLast tetikleyicileri iki farklı tetikleyici olmalı.
[ @stmttype = ] 'stmttype'
Tetikleyiciyi ateşleyen Transact-SQL ifadesini belirtir.
@stmttypevarchar(50)'dir ve INSERT, UPDATE, DELETE, LOGON, veya DDL Olaylarında listelenen herhangi bir T-SQL ifade olayı olabilir. Etkinlik grupları belirtilemez.
Bir tetikleyici, ancak o tetikleyici o ifade türü için tetikleyici olarak tanımlandıktan sonra bir ifade türü için veya First tetikleyici olarak atanabilirLast. Örneğin, TR1 tetikleyici olarak tanımlanmışsa First tablo INSERTT1 üzerinde tetikleyici olarak belirlenebilir TR1INSERT. Veritabanı Motoru, TR1yalnızca tetikleyici INSERTFirst olarak tanımlanan , bir Last ifadenin veya UPDATE tetikleyicisi olarak ayarlandığında hata döndürür. Daha fazla bilgi için Açıklamalar bölümüne bakın.
@namespace = { 'VERITABANI' | 'SUNUCU' | NULL }
@triggername bir DDL tetikleyicisi olduğunda, @namespace @triggername veritabanı kapsamı mı yoksa sunucu kapsamı mı oluşturulduğunu belirtir.
Eğer @triggername bir giriş tetikleyiciyse, SERVER belirtilmelidir. DDL tetikleyici dürbünü hakkında daha fazla bilgi için bkz. DDL tetikleyicileri. Belirtilmemişse ya NULL da belirtilmişse, @triggername bir DML tetikleyicisidir.
Dönüş kodu değerleri
0 (başarı) ve 1 (başarısızlık).
Açıklamalar
Bu bölüm, veri işleme dili (DML) ve veri tanım dili (DDL) tetikleyicileri için dikkate alınan konuları tartışmaktadır.
DML tetikleyicileri
Tek bir tabloda her ifade için sadece bir First tetikleyici Last olabilir.
Eğer bir First tetikleyici zaten tabloda, veritabanında veya sunucuda tanımlanmışsa, aynı First için aynı tablo, veritabanı veya sunucu için yeni bir tetikleyici atamazsınız. Bu kısıtlama tetikleyicileri de uygular Last .
Çoğaltma, anında güncelleme veya kuyruklanan güncelleme aboneliğine dahil edilen herhangi bir tablo için otomatik olarak ilk tetikleyici oluşturur. Çoğaltma için tetikleyicinin ilk tetikleyici olması gerekir. Replikasyon, anında güncelleme veya kuyruklanan güncelleme aboneliğine ilk tetikleyici olan bir tabloyu eklemeye çalıştığınızda hata çıkarır. Bir tetikleyiciyi aboneliğe bir tablo dahil edildikten sonra ilk tetikleyici yapmaya çalışırsanız, sp_settriggerorder hata döner. Replikasyon ALTER TRIGGER tetikleyicisini kullanırsanız veya sp_settriggerorder replikasyon tetikleyicisini bir Last veya None tetikleyiciye çevirirseniz, abonelik doğru çalışmaz.
DDL tetikleyicileri
Eğer aynı olayda veritabanı kapsamına sahip bir DDL tetikleyici ve sunucu kapsamına sahip bir DDL tetikleyici varsa, her iki tetikleyicinin de tetikleyici First veya Last tetikleyici olduğunu belirtebilirsiniz. Ancak, sunucu kapsamına bağlı tetikleyiciler her zaman önce ateşlenir. Genel olarak, aynı olayda var olan DDL tetikleyicilerinin yürütülme sırası şöyledir:
- Sunucu düzeyinde işaretlenmiş tetikleyici
First - Diğer sunucu düzeyindeki tetikleyiciler
- Sunucu düzeyinde işaretlenmiş tetikleyici
Last - Veritabanı düzeyinde tetikleyici işaretlenmiş
First - Diğer veritabanı düzeyinde tetikleyiciler
- Veritabanı düzeyinde tetikleyici işaretlenmiş
Last
Genel tetikleyiciyle ilgili dikkat edilmesi gerekenler
Bir ALTER TRIGGER ifade ilk veya son tetikleyiciyi değiştirirse, First tetikleyicide orijinal olarak ayarlanan veya Last öznitelik düşürüldü ve değer yerine None. Sipariş değeri kullanılarak sp_settriggerordersıfırlanmalıdır.
Aynı tetikleyici, birden fazla ifade türü için birinci veya son emir olarak belirlenmek zorundaysa, sp_settriggerorder her ifade türü için yürütülmelidir. Ayrıca, tetikleyici, önce bir ifade türü için tanımlanmalıdır ve önce o ifade türü için ateş edilecek veya First tetikleyici olarak belirlenmelidirLast.
Permissions
DDL tetikleyicisinin sırasını sunucu kapsamı (oluşturuldu ON ALL SERVER) veya giriş tetikleyicisi ile ayarlamak için izin gereklidir CONTROL SERVER .
Veritabanı kapsamı (oluşturulan ON DATABASE) ile bir DDL tetikleyicisinin sırasını ayarlamak için izin gereklidir ALTER ANY DATABASE DDL TRIGGER .
DML tetikleyicisinin sırasını ayarlamak, tetikleyicinin tanımlandığı tablo veya görünüm üzerinde izin gerektirir ALTER .
Örnekler
A. DML tetikleyici için ateşleme sırasını ayarlayın
Aşağıdaki örnek, uSalesOrderHeader bir işlem masada UPDATE gerçekleştikten Sales.SalesOrderHeader sonra tetikleyicinin ilk ateşlenen tetik olduğunu belirtir.
USE AdventureWorks2022;
GO
EXECUTE sp_settriggerorder
@triggername = 'Sales.uSalesOrderHeader',
@order = 'First',
@stmttype = 'UPDATE';
B. DDL tetikleyici için ateşleme sırasını ayarlayın
Aşağıdaki örnek, ddlDatabaseTriggerLog tetikleyicinin veritabanında bir ALTER_TABLE olay gerçekleştikten AdventureWorks2025 sonra ateşlenen ilk tetikleyici olduğunu belirtir.
USE AdventureWorks2022;
GO
EXECUTE sp_settriggerorder
@triggername = 'ddlDatabaseTriggerLog',
@order = 'First',
@stmttype = 'ALTER_TABLE',
@namespace = 'DATABASE';
İlgili içerik
- Sistem saklı yordamları (Transact-SQL)
- Veritabanı Altyapısı saklı yordamları (Transact-SQL)
- ALTER TRIGGER (Transact-SQL)