Aracılığıyla paylaş


İlk ve Son Tetikleyicileri Belirtme

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Bir tabloyla ilişkili AFTER tetikleyicilerinden birinin, her INSERT, DELETE ve UPDATE tetikleyici eylemleri için tetiklenen ilk AFTER tetikleyicisi veya son AFTER tetikleyicisi olacağını belirtebilirsiniz. İlk ve son tetikleyiciler arasında tetiklenen AFTER tetikleyicileri belirsiz bir sırayla yürütülür.

AFTER tetikleyicisinin sırasını belirtmek için sp_settriggerorder saklı yordamını kullanın. sp_settriggerorder aşağıdaki seçeneklere sahiptir.

Seçenek Açıklama
İlk DML tetikleyicisinin, tetikleme eylemi için çalışan ilk AFTER tetikleyicisi olduğunu belirtir.
Son DML tetikleyicisinin tetiklenme eylemi için çalıştırılan son AFTER tetikleyicisi olduğunu belirtir.
Yok DML tetikleyicisinin tetiklenmesi gereken belirli bir sıra olmadığını belirtir. Genellikle bir tetikleyiciyi ilk veya son olmaktan sıfırlamak için kullanılır.

Aşağıdaki örnekte sp_settriggerorderkullanımı gösterilmektedir:

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

Önemli

İlk ve son tetikleyiciler iki farklı DML tetikleyicisi olmalıdır.

Tablonun üzerinde aynı anda tanımlanan INSERT, UPDATE ve DELETE tetikleyicileri olabilir. Her deyim türünün kendi ilk ve son tetikleyicileri olabilir, ancak aynı tetikleyiciler olamaz.

Tablo için tanımlanan ilk veya son tetikleyici, FOR UPDATE, FOR DELETE veya FOR INSERT gibi bir tetikleyici eylemini kapsamazsa, eksik eylemler için ilk veya son tetikleyici yoktur.

"INSTEAD OF tetikleyicileri, ilk veya son tetikleyici olarak belirtilemez." BUNUN YERINE tetikleyiciler, temel alınan tablolarda güncelleştirmeler yapılmadan önce tetiklenir. Güncelleştirmeler, temel alınan tablolarda YERİNE tetikleyicisi tarafından yapılırsa, tabloda tanımlanan SONRASI tetikleyicileri çalıştırılmadan önce gerçekleşir. Örneğin, bir görünümdeki INSERT YERİNE tetikleyici, temel tabloya veri eklerse ve temel tablo kendisinde bir INSERT YERİNE tetikleyici ve üç INSERT SONRASI tetikleyici içeriyorsa, ekleme eylemi yerine temel tablodaki INSERT YERİNE tetikleyici tetiklenir. Temel tablodaki AFTER tetikleyicileri ise, temel tabloda herhangi bir ekleme işleminden sonra tetiklenir. Daha fazla bilgi için bkz. DML Tetikleyicileri.

ALTER TRIGGER deyimi bir ilk veya son tetikleyiciyi değiştirirse, İlk veya Son özniteliği bırakılır ve sipariş değeri hiçbiriolarak ayarlanır. Siparişin sp_settriggerorderkullanılarak sıfırlanması gerekir.

OBJECTPROPERTY işlevi, şu özellikleri kullanarak tetikleyicinin ilk veya son tetikleyici olup olmadığını bildirir: ExecIsFirstInsertTrigger, ExecIsFirstUpdateTrigger, ExecIsFirstDeleteTrigger, ExecIsLastInsertTrigger, ExecIsLastUpdateTriggerve ExecIsLastDeleteTrigger.

Çoğaltma, anında güncelleştirme veya kuyruğa alınmış güncelleştirme aboneliğine dahil olan tüm tablolar için otomatik olarak bir ilk tetikleyici oluşturur. Çoğaltmanın gerçekleşmesi için tetikleyicinin ilk tetikleyici olması gerekir. Anında güncelleştirme veya kuyruğa alınmış güncelleştirme aboneliğine ilk tetikleyicisi olan bir tablo eklemeye çalıştığınızda çoğaltma hatası oluşur. Bir tablo aboneliğe eklendikten sonra tetikleyiciyi ilk tetikleyici yapmaya çalışırsanız sp_settriggerorder bir hata döndürür. Çoğaltma tetikleyicisinde ALTER kullanırsanız veya çoğaltma tetikleyicisini son tetikleyici veya hiç tetikleyici olarak değiştirmek için sp_settriggerorder kullanırsanız, abonelik doğru şekilde çalışmaz.

Ayrıca Bkz.

NESNE ÖZELLIĞI (Transact-SQL)
sp_settriggerorder (Transact-SQL)