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ı
CREATE TRIGGER ifadesi ile daha önce oluşturulan bir DML, DDL veya giriş tetikleyicisinin tanımını değiştirir. Tetikleyiciler, CREATE TRIGGER kullanılarak oluşturulur. Doğrudan Transact-SQL ifadelerinden veya Microsoft .NET Framework ortak dil çalışma zamanında (CLR) oluşturulan ve SQL Server örneğine yüklenen montaj yöntemlerinden oluşturulabilirler. ALTER TRIGGER ifadesinde kullanılan parametreler hakkında daha fazla bilgi için bkz. CREATE TRIGGER (Transact-SQL) bölüm.
Transact-SQL söz dizimi kuralları
Sözdizimi
-- SQL Server Syntax
-- Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger)
ALTER TRIGGER schema_name.trigger_name
ON ( table | view )
[ WITH <dml_trigger_option> [ ,...n ] ]
( FOR | AFTER | INSTEAD OF )
{ [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] }
[ NOT FOR REPLICATION ]
AS { sql_statement [ ; ] [ ...n ] | EXTERNAL NAME <method specifier>
[ ; ] }
<dml_trigger_option> ::=
[ ENCRYPTION ]
[ <EXECUTE AS Clause> ]
<method_specifier> ::=
assembly_name.class_name.method_name
-- Trigger on an INSERT, UPDATE, or DELETE statement to a table
-- (DML Trigger on memory-optimized tables)
ALTER TRIGGER schema_name.trigger_name
ON ( table )
[ WITH <dml_trigger_option> [ ,...n ] ]
( FOR | AFTER )
{ [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] }
AS { sql_statement [ ; ] [ ...n ] }
<dml_trigger_option> ::=
[ NATIVE_COMPILATION ]
[ SCHEMABINDING ]
[ <EXECUTE AS Clause> ]
-- Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE,
-- or UPDATE statement (DDL Trigger)
ALTER TRIGGER trigger_name
ON { DATABASE | ALL SERVER }
[ WITH <ddl_trigger_option> [ ,...n ] ]
{ FOR | AFTER } { event_type [ ,...n ] | event_group }
AS { sql_statement [ ; ] | EXTERNAL NAME <method specifier>
[ ; ] }
}
<ddl_trigger_option> ::=
[ ENCRYPTION ]
[ <EXECUTE AS Clause> ]
<method_specifier> ::=
assembly_name.class_name.method_name
-- Trigger on a LOGON event (Logon Trigger)
ALTER TRIGGER trigger_name
ON ALL SERVER
[ WITH <logon_trigger_option> [ ,...n ] ]
{ FOR| AFTER } LOGON
AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME < method specifier >
[ ; ] }
<logon_trigger_option> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]
<method_specifier> ::=
assembly_name.class_name.method_name
-- Azure SQL Database Syntax
-- Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger)
ALTER TRIGGER schema_name. trigger_name
ON (table | view )
[ WITH <dml_trigger_option> [ ,...n ] ]
( FOR | AFTER | INSTEAD OF )
{ [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] }
AS { sql_statement [ ; ] [...n ] }
<dml_trigger_option> ::=
[ <EXECUTE AS Clause> ]
-- Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE, or UPDATE statement (DDL Trigger)
ALTER TRIGGER trigger_name
ON { DATABASE }
[ WITH <ddl_trigger_option> [ ,...n ] ]
{ FOR | AFTER } { event_type [ ,...n ] | event_group }
AS { sql_statement
[ ; ] }
}
<ddl_trigger_option> ::=
[ <EXECUTE AS Clause> ]
Arguments
schema_name
DML tetikleyicisinin ait olduğu şemanın adıdır. DML tetikleyicileri, oluşturuldukları tablo veya görünüm şemasına göre kapsamlıdır.
şema*_name* yalnızca DML tetikleyicisi ve ona karşılık gelen tablo veya görünüm varsayılan şemaya ait ise isteğe bağlıdır.
schema_name DDL veya giriş tetikleyicileri için belirtilemez.
trigger_name
Mevcut tetikleyici modifikasyon mı?
masa | görünüm
DML tetikleyicisinin uygulandığı tablo veya görünümdür. Tablonun veya görünümün tam nitelikli adının belirtilmesi isteğe bağlıdır.
DATABASE
DDL tetikleyicisinin kapsamını geçerli veritabanına uygular. Belirtildiyse, geçerli veritabanında event_type veya event_group oluştuğunda tetikleyici tetikler.
TÜM SUNUCU
için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.
Geçerli sunucuya bir DDL veya oturum açma tetikleyicisinin kapsamını uygular. Belirtildiyse, geçerli sunucunun herhangi bir yerinde event_type veya event_group oluştuğunda tetikleyici tetikler.
ŞIFRELEME ILE
için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.
ALTER TRIGGER ifadesinin metnini içeren sys.syscommentssys.sql_modules girişlerini şifreler. WITH ENCRYPTION kullanmak, tetikleyicinin SQL Server çoğaltmasının bir parçası olarak yayımlanmasını engeller. CLR tetikleyicileri için WITH ENCRYPTION belirtilemez.
Uyarı
Eğer bir tetikleyici WITH ENCRYPTION kullanılarak oluşturulursa, bu seçeneğin etkin kalması için ALTER TRIGGER ifadesinde tekrar belirtilmelidir.
OLARAK ÇALIŞTIR
Tetikleyicinin yürütüldiği güvenlik bağlamını belirtir. SQL Server örneğinin tetikleyici tarafından referans verilen herhangi bir veritabanı nesnesinin izinlerini doğrulamak için kullandığı kullanıcı hesabını kontrol etmenizi sağlar.
Daha fazla bilgi için bkz . EXECUTE AS Yan Tümcesi (Transact-SQL).
NATIVE_COMPILATION
Tetikleyicinin yerel olarak derlendiğini gösterir.
Bellek için iyileştirilmiş tablolardaki tetikleyiciler için bu seçenek gereklidir.
SCHEMABINDING
Tetikleyici tarafından referans verilen tabloların düşürülemeyeceğini veya değiştirilemeyeceğini garanti eder.
Bu seçenek, bellek optimize edilmiş tablolardaki tetikleyiciler için gereklidir ve geleneksel tablolardaki tetikleyiciler için desteklenmez.
SONRA
Tetikleyicinin yalnızca tetikleyici SQL ifadesi başarıyla çalıştırıldıktan sonra ateşlendiğini belirtir. Tüm referans kaskad eylemleri ve kısıtlama kontrolleri de bu tetikleyici tetiklenmeden önce başarılı olmalıdır.
AFTER varsayılan olarak kullanılır, sadece FOR anahtar kelimesi belirtilmişse.
DML AFTER tetikleyicileri yalnızca tablolarda tanımlanabilir.
ONUN YERİNE
Tetikleyici SQL ifadesi yerine DML tetikleyicisinin çalıştırıldığını belirtir, böylece tetikleyici ifadelerin eylemleri geçersiz kılılır. INSTEAD OF DDL veya giriş tetikleyicileri için belirtilemez.
En fazla bir INSERT (INSERT, UPDATE veya DELETE ifadesi olarak) bir INSTEAD OF tetikleyicisi bir tablo veya görünüm üzerinde tanımlanabilir. Ancak, her görünümün kendine ait YERİNE tetikleyicisi olduğu görünümler üzerinde görünümler tanımlayabilirsiniz.
INSTEAD tetikleyicileri, WITH CHECK seçeneği kullanılarak oluşturulan görünümlerde izin verilmez. SQL Server, WITH CHECK OPTION belirtilen bir görünüme INSTEAD OF tetikleyicisi eklendiğinde hata oluşturur. Kullanıcı, tetikleyici INSTEAD OF tanımlamadan önce ALTER VIEW ile bu seçeneği kaldırmalıdır.
{ [ SIL ] [ , ] [ EKLE ] [ , ] [ GÜNCELLEME ] } | { [EKLE] [ , ] [GÜNCELLEME] }
Veri değiştirme ifadelerini belirtir, bu tablo veya görünüme karşı denendiğinde DML tetikleyicisini aktive eder. En az bir seçenek belirtilmelidir. Tetikleyici tanımında bunların herhangi bir sırayla kombinasyonuna izin verilir. Birden fazla seçenek belirtilmişse, seçenekleri virgülle ayırın.
INSTEAD OF tetikleyicileri için, DELETE seçeneği, DELETE'de bir kaskad eylemi belirten referans ilişkisi olan tablolarda izin verilmez. Benzer şekilde, GÜNCELLEME ÜZERİNDE bir kademeli eylemi belirten referans ilişkisi olan tablolarda GÜNCELLİ seçeneği izin verilmez. Daha fazla bilgi için bkz. ALTER TABLE (Transact-SQL).
event_type
Bir Transact-SQL dil olayının adıdır ve çalıştırıldıktan sonra DDL tetikleyicisinin ateşlenmesine neden olur. DDL tetikleyicileri için geçerli olaylar DDL Olayları'nda listelenir.
event_group
Önceden tanımlanmış bir Transact-SQL dil olayları grubunun adıdır. DDL tetikleyicisi, event_group'ye ait herhangi bir Transact-SQL dil olayı gerçekleştirildikten sonra ateşlenir. DDL tetikleyicileri için geçerli olay grupları DDL Olay Grupları'nda listelenir. ALTER TRIGGER çalışmayı bitirdikten sonra, event_group aynı zamanda kapsadığı olay türlerini sys.trigger_events katalog görünümüne ekleyerek bir makro olarak da görev yapar.
ÇOĞALTMA IÇIN DEĞIL
için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.
Bir replikasyon ajanı tetikleyiciye dahil olan tabloyu değiştirdiğinde tetikleyicinin çalıştırılmaması gerektiğini gösterir.
sql_statement
Tetikleyici koşullar ve eylemlerdir.
Bellek optimize edilmiş tablolardaki tetikleyiciler için, en üst seviyede izin verilen tek sql_statement ATOMIC bloktur. ATOMIC bloğu içinde izin verilen T-SQL, yerel proclar içinde izin verilen T-SQL ile sınırlıdır.
DIŞ ADI <method_specifier>
için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.
Bir montajın tetikleyiciyle bağlanma yöntemini belirler. Yöntemin bağımsız değişken almaması ve void döndürmesi gerekir. class_name geçerli bir SQL Server tanımlayıcısı olmalı ve derleme görünürlüğü ile derlemede sınıf olarak bulunmalıdır. Sınıf iç içe bir sınıf olamaz.
Açıklamalar
ALTER TRIGGER hakkında daha fazla bilgi için, CREATE TRIGGER (Transact-SQL) içindeki Açıklamalara bakınız.
Uyarı
EXTERNAL_NAME ve ON_ALL_SERVER seçenekleri kapalı bir veritabanında mevcut değildir.
DML Tetikleyicileri
ALTER TRIGGER, tablolarda ve görünümlerde INSTEAD OF tetikleyiciler aracılığıyla manuel olarak güncellenebilir görünümleri destekler. SQL Server, ALTER TRIGGER'i tüm tetikleyiciler için aynı şekilde uygular (AFTER, INSTEAD-OF).
Bir tabloda çalıştırılacak ilk ve son AFTER tetikleyicileri sp_settriggerorder kullanılarak belirlenebilir. Bir tabloda yalnızca bir ilk ve bir son SONRAKI tetikleme belirtilebilir. Aynı tabloda başka AFTER tetikleyicileri varsa, rastgele çalıştırılırlar.
Bir ALTER TRIGGER ifadesi ilk veya son tetikleyiciyi değiştirirse, değiştirilen tetikleyicideki ilk veya son nitelik ayar bırakılır ve sipariş değeri sp_settriggerorder kullanılarak sıfırlanmalıdır.
AFTER tetikleyicisi ancak tetikleyici SQL ifadesi başarıyla çalıştırıldıktan sonra çalıştırılır. Bu başarılı yürütme, güncelleştirilen veya silinen nesneyle ilişkili tüm başvurusal art arda eylemleri ve kısıtlama denetimlerini içerir. AFTER tetikleme işlemi, tetikleyici ifadenin etkilerini ve tetikleyici ifadenin neden olduğu tüm referanslı kaskad UPDATE ve DELETE eylemlerini kontrol eder.
Bir çocuk veya referans tablosuna yapılan DELETE eylemi, ana tablodan bir DELETE üzerindeki CASCADE sonucu olduğunda ve o alt tabloda DELETE üzerinde INSTEAD OF tetikleyicisi tanımlandığında, tetikleyici göz ardı edilir ve DELETE eylemi yürütülür.
DDL Tetikleyicileri
DML tetikleyicilerinin aksine, DDL tetikleyicileri şemalarla sınırlı değildir. Bu nedenle, OBJECT_ID, OBJECT_NAME, OBJECTPROPERTY ve OBJECTPROPERTY(EX) DDL tetikleyicileri hakkında meta veri sorgularken kullanılamaz. Bunun yerine katalog görünümlerini kullanın. Daha fazla bilgi için bkz. DDL Tetikleyicileri Hakkında Bilgi Alma.
Oturum Açma Tetikleyicileri
Azure SQL Database, giriş olaylarında tetikleyicileri desteklemez.
Permissions
Bir DML tetikleyicisini değiştirmek için, tetikleyicinin tanımlandığı tablo veya görünüm üzerinde ALTER izni gereklidir.
Sunucu kapsamı (ALL SERVER'da) veya giriş tetikleyicisi ile tanımlanan bir DDL tetikleyicisini (TÜM SUNUCUDA) veya giriş tetikleyicisini değiştirmek için sunucuda CONTROL SERVER izni gerekir. Veritabanı kapsamına (ON DATABASE) özgü tanımlanmış bir DDL tetikleyicisini değiştirmek için mevcut veritabanında HER HANSI VERITABANI DDL TETIKLEYICI izni alter gerekir.
Örnekler
Aşağıdaki örnek, AdventureWorks2025 veritabanında bir DML tetikleyicisi oluşturur; bu tetikleyici, bir kullanıcı tabloya veri SalesPersonQuotaHistory eklemeye veya değiştirmeye çalıştığında istemciye kullanıcı tanımlı bir mesaj yazdırır. Tetikleyici daha sonra tetikleyici yalnızca ALTER TRIGGER aktivitelere uygulanacak şekilde değiştirilirINSERT. Bu tetikleyici, kullanıcıya Compensation bölümünü de bilgilendirmek için bu tabloya satır güncelleştirdiğini veya eklediğini anımsattığı için yararlıdır.
CREATE TRIGGER Sales.bonus_reminder
ON Sales.SalesPersonQuotaHistory
WITH ENCRYPTION
AFTER INSERT, UPDATE
AS RAISERROR ('Notify Compensation', 16, 10);
GO
-- Now, change the trigger.
ALTER TRIGGER Sales.bonus_reminder
ON Sales.SalesPersonQuotaHistory
AFTER INSERT
AS RAISERROR ('Notify Compensation', 16, 10);
GO
Ayrıca Bkz.
ATKI TETIK (Transact-SQL)
TETİKLEYİCİYİ ETKİNLEŞTİR (Transact-SQL)
TETİKLEMİYİ DEVRE DIŞI BIRAK (Transact-SQL)
OLAY VERILERI (Transact-SQL)
sp_helptrigger (Transact-SQL)
Saklı Prosedür Oluştur
sp_addmessage (Transact-SQL)
İşlemler
DML Tetikleyicileri Hakkında Bilgi Alma
DDL Tetikleyicileri Hakkında Bilgi Alma
sys.triggers (Transact-SQL)
sys.trigger_events (Transact-SQL)
sys.sql_modüller (Transact-SQL)
sys.assembly_modules (Transact-SQL)
sys.server_triggers (Transact-SQL)
sys.server_trigger_events (Transact-SQL)
sys.server_sql_modules (Transact-SQL)
sys.server_assembly_modules (Transact-SQL)
Yayın Veritabanlarında Şema Değişiklikleri Yapın