ALTER TRIGGER (Transact-SQL)

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

Bir DML, DDL veya giriş tetikleyicisinin tanımını, daha önce ifade CREATE TRIGGER tarafından oluşturulmuş olarak değiştirir. Tetikleyiciler, kullanılarak CREATE TRIGGERoluş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. Cümlede ALTER TRIGGER kullanılan parametreler hakkında daha fazla bilgi için (Transact-SQL) bölümüne bakınızCREATE TRIGGER.

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.

Cümle'nin ALTER TRIGGER metnini içeren sys.syscommentssys.sql_modül 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 ifadede ALTER TRIGGER tekrar belirtilmelidir.

EXECUTE AS
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ümce (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, her , UPDATE, veya DELETE ifade için bir INSTEAD OF tetikleyicisi INSERTbir 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 YERINE tanımlamadan önce bu seçeneği kaldırmalıdır ALTER VIEW .

{ [ DELETE ] [ , ] [ ] [ INSERT ] [ , ] [ UPDATE ] } | { [INSERT ] [ , ] [ UPDATE ] }
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.

OF tetikleyiciler YERINE ise, DELETE bu seçenek, bir zincirleme eylemi ÜZERINDE DELETEbelirten referans ilişkisi olan tablolarda izin verilmez. Benzer şekilde, ON UPDATEbir kademeli eylemi belirten referans ilişkisi olan tablolarda bu UPDATE seçenek, 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. Çalışmayı bitirdikten ALTER TRIGGER sonra, event_group kapsadığı olay türlerini sys.trigger_events katalog görünümüne ekleyerek 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

Daha fazla bilgi ALTER TRIGGERiçin, bkz. (Transact-SQLiçindeki AçıklamalarCREATE TRIGGER.

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 tetikleyicileriyle manuel olarak güncellenebilir görünümleri destekler. SQL Server ALTER TRIGGER her türlü tetikleyici için aynı şekilde uygulanır (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 ifade ilk veya son tetikleyiciyi değiştirirse, değiştirilen tetikleyicideki ilk veya son özellik ayarı düşürüldü ve emir 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 imamdan kaynaklanan tüm referans zincirleme UPDATE ve DELETE eylemleri kontrol eder.

Bir çocuk veya referans tablosuna yapılan bir DELETE eylem, ana tablodan bir DELETE CASCADE sonucu olduğunda ve o alt tabloda INSTEAD OF tetikleyicisi DELETE tanımlandığında, tetikleyici göz ardı edilir ve DELETE işlem 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 Veritabanı, 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ı (ON DATABASE) ile tanımlanan bir DDL tetikleyicisini değiştirmek için mevcut veritabanındaki herhangi DATABASE bir DDL TRIGGER iznini değiştirmek 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.

DROP TRIGGER (Transact-SQL)
ENABLE TRIGGER (Transact-SQL)
DISABLE TRIGGER (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