Tetikleyici (Transact-SQL) Değiştir

Bir DML, DDLveya create TRIGGER deyimdaha önce oluşturulan oturum açma tetikleyici tanımını değiştirir.Tetikleyiciler, Tetikleyici oluşturma kullanılarak oluşturulur.Doğrudan oluşturulabilir Transact-SQL ifadeleri veya oluşturulan derleme yöntemleri Microsoft .NET Framework ortak dil çalışma zamanı (clr) ve örnek için karşıya SQL Server.Tetikleyici alter deyimiçinde kullanılan parametreleri hakkında daha fazla bilgi için bkz: CREATE TRIGGER (Transact-SQL).

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

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 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

Bağımsız değişkenler

  • schema_name
    DML tetikleyici ait olduğu şema addır.DML Tetikleyicileri tablo ya da görünüm üzerinde oluşturuldukları şemasına belirlenmektedir.schema_nameyalnızca DML tetikleyici ve karşılık gelen tablo veya görünüm için varsayılan şema aitse isteğe bağlıdır.schema_nameDDL veya oturum açma tetikleyici belirtilemez.

  • trigger_name
    Değiştirmek için varolan bir tetikleyicinin olur.

  • table | view
    tablo ya da Görünüm DML tetikleyici yürütüldüğü olur.tablo veya görünüm tam nitelikli adını belirten isteğe bağlıdır.

  • VERİTABANI
    DDL tetikleyici kapsam geçerli veritabanına uygulanır.Belirtilmişse, tetiği her harekete event_type veya event_group oluşuyor geçerli veritabanı.

  • TÜM SUNUCU
    DDL veya oturum açma tetikleyici kapsam geçerli sunucuya uygulanır.Belirtilmişse, tetiği her harekete event_type veya event_group ortaya herhangi bir yerinde geçerli bir sunucu.

  • ŞİFRELEME İLE
    Şifreler sys.syscomments sys.sql_modules alter TRIGGER deyimmetnini içeren girdiler.WITH ENCRYPTION kullanarak engeller tetikleyicinin parçası olarak yayımlanan SQL Server çoğaltma.Şifreleme ile clr Tetikleyiciler için belirtilemez.

    Not

    Tetikleyici ile şifreleme kullanılarak oluşturulduysa, bu seçeneğin etkin kalması tetikleyici alter deyim yeniden belirtilmesi gerekir.

  • EXECUTE AS
    Tetikleyici yürütüldüğü güvenlik bağlamını belirtir.örnek kullanıcı hesabı denetimi sağlayan SQL Server tarafından başvurulan veritabanı nesnelerinin izinlerini doğrulamak için kullanırtetikleyici.

    Daha fazla bilgi için, bkz. Yan (Transact-SQL) yürütme.

  • SONRA
    Yalnızca tetikleyici SQL deyim başarıyla yürütüldü sonra tetikleyici harekete geçirilen belirtir.Bu tetikleyici harekete önce tüm bilgi tutarlılığına basamaklı eylemleri ve sınırlama denetimleri de başarılı verilmiş olması gerekir.

    SONRA için anahtar sözcük belirtilen yalnızca, varsayılan değerdir.

    DML Tetikleyiciler sonra yalnızca tablolar üzerinde tanımlanabilir.

  • YERİNE
    DML tetikleyici INSTEAD of tetikleyici SQLdeyim, bu nedenle, tetikleyici ifadeleri eylemlerini geçersiz kılma getirildiğini belirtir. Bunun yerine of DDL veya oturum açma tetikleyici belirtilemez.

    En çok, bir tetikleyici INSERT, update veya delete deyim her yerine bir tablo ya da görünüm üzerinde tanımlanabilir.Ancak, her görünüm tetikleyici yerine kendi sahip olduğu görünümlerinde görünüm tanımlayabilirsiniz.

    INSTEAD of tetikleyicileri ile Denetle seçeneği kullanılarak oluşturulmuş görünümler üzerinde izin verilmez.SQL Serverbir INSTEAD of tetikleyicisi ile Denetle seçeneği belirtilmiş olan bir görünüm eklenirken bir hata yükseltir.Kullanıcı, alter VIEW INSTEAD of tetikleyicisi tanımlamadan önce o seçeneğini kaldırmanız gerekir.

  • { [DELETE] , ] [EKLE] , ] [GÜNCELLEŞTİRME]} | {[Ekle] , [güncelleştirme]}
    Bu ' % s'tabloya tablo karşı çalıştığınız veri değişikliği deyimleri belirtir veya görüntülemek, DML tetikleyici etkinleştirme.En az bir seçenek belirtilmeli.İstediğiniz sıralamayla herhangi bir bileşimini tetikleyici tanımını izin verilir.Birden fazla seçenek belirtilmezse, seçenekleri virgüllerle ayırın.

    İçin INSTEAD OF tetikleyicileri, Sil seçeneği bir cascade eylem on delete belirterek bilgi tutarlılığına ilişkisi olan tablolara üzerinde izin verilmez.Benzer şekilde, güncelleştirme seçeneği on update gibi bir cascade eylem belirten bilgi tutarlılığına ilişkisi olan tablolara üzerinde izin verilmez.Daha fazla bilgi için, bkz. ALTER TABLE (Transact-SQL).

  • event_type
    Adı bir Transact-SQL Dil olay , yürütme, sonra sonra neden bir DDL tetikleyici yangın.DDL Tetikleyiciler için geçerli olaylar listelenen ddl olayları.

  • event_group
    Bir önceden tanımlanmış gruplandırma , adı Transact-SQL Dil olayları.DDL tetikleyici harekete herhangi bir yürütme sonrasında Transact-SQL Dil olay , ait olduğu event_group.DDL Tetikleyiciler için geçerli olay grupları listelenen ddl olay grupları.alter TETİK çalışması, tamamlandıktan sonra event_group da makro olarak olay türleri ekleyerek, için Kapaklar davranır sys.trigger_events Katalog görünümü.

  • ÇOĞALTMA İÇİN DEĞİL
    tablo de tetikleyici katılan bir çoğaltma Aracısı değişiklik yaptığında tetikleyici yürütülmelidir değil olduğunu gösterir.Daha fazla bilgi için, bkz. Denetleme sınırlamaları, kimlikleri ve tetikleyiciler not ile çoğaltma.

  • sql_statement
    Tetikleyici koşulları ve eylemleri olur.

  • <method_specifier>
    Tetikleyici ile bağlamak için derleme yöntem belirtir.yöntem bağımsız değişkenleri ve void dönüş yok gerçekleştirmeniz gerekir.class_namebir geçerli olması SQL Server tanımlayıcısı ve derleme görünürlük derleme sınıf olarak varolması gerekirİç içe geçmiş bir sınıf sınıf olamaz.

Açıklamalar

Tetikleyici değiştirme hakkında daha fazla bilgi için bkz: Açıklamalar içinde CREATE TRIGGER (Transact-SQL).

DML Tetikleyicileri

Tetikleyici DEĞİŞTİRMEK, tablolar ve görünümler üzerinde INSTEAD OF tetikleyicileri aracılığıyla el ile güncellenebilir görünümleri destekler.SQL Serveralter tetikleyici Tetikleyiciler her türlü ile aynı şekilde uygulanır (sonra INSTEAD-in).

İlk ve son tablo üzerinde yürütülecek tetikleyicileri kullanarak belirtilebilir sonra sp_settriggerorder.Tek bir ilk ve tek son sonra tetikleyici tablobelirtilebilir.Aynı tablodiğer after tetikleyicilerini varsa, bunlar rasgele yürütülür.

Bir tetikleyici alter deyim ilk veya son tetikleyici değiştirir, ilk veya son öznitelik küme değiştirilmiş tetikleyici bırakılan ve sipariş değeri kullanarak sıfırlanması, sp_settriggerorder.

Yalnızca tetikleyici SQL deyim başarıyla yürüttü sonra after tetikleyicisi yürütülür.Bu başarılı yürütülmesine tüm bilgi tutarlılığına basamaklı eylemler ve güncelleştirildi veya silindi nesneyle ilişkili sınırlama denetimleri içerir.deyim tetikleyici ve ayrıca tüm bilgi tutarlılığına cascade etkilerini after tetikleyicisi işlem denetler, güncelleştirme ve tetikleyici deyimneden olan eylemleri silmek.

delete alttabloüzerinde tanımlı bir alt veya başvuru tablo delete eylem sonucu art ARDA silmeyi üst tablove bir INSTEAD of tetikleyicisi açıkken tetikleyici dikkate alınmaz ve delete eylem yürütülür.

DDL Tetikleyicileri

DML tetikleyiciler, DDL Tetikleyiciler şemaları için kapsamlı değil.Bu nedenle, OBJECT_ID, nesne_adı, objectproperty ve objectproperty(ex) DDL tetikleyiciler hakkında meta veriler sorgularken kullanılamaz.katalog görünümleri kullanın.Daha fazla bilgi için, bkz. ddl tetikleyiciler hakkında bilgi alma.

İzinler

Bir DML değiştirmek için tablo veya Görünüm tetikleyici tanımlanmış alter izninin tetikleyici gerektirir.

DDL değiştirmek için sunucu kapsam (on tüm sunucu) veya oturum açma tetikleyici tanımlanmış tetikleyici server control server izni gerektirir.DDL değiştirmek için alter any database DDL tetikleyici izni geçerli veritabanında veritabanı kapsam (on database) tanımlanmış tetikleyici gerektirir.

Örnekler

Aşağıdaki örnek, bir kullanıcı eklemek veya veri değiştirmek çalıştığında, istemci kullanıcı tanımlı bir ileti yazdırır DML tetikleyici oluşturur SalesPersonQuotaHistorytablo. Tetikleyici kullanarak daha sonra değiştirilen ALTER TRIGGER Tetikleyici uygulama yalnızca INSERT etkinlikleri.Bu tetikleyici güncelleştirir veya Ayrıca bildirmek için bu tablo satır ekler kullanıcı anımsatan için yararlı olur Compensation bölüm.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID(N'Sales.bonus_reminder', N'TR') IS NOT NULL
    DROP TRIGGER Sales.bonus_reminder;
GO
CREATE TRIGGER Sales.bonus_reminder
ON Sales.SalesPersonQuotaHistory
WITH ENCRYPTION
AFTER INSERT, UPDATE 
AS RAISERROR ('Notify Compensation', 16, 10);
GO
-- Now, change the trigger.
USE AdventureWorks2008R2;
GO
ALTER TRIGGER Sales.bonus_reminder
ON Sales.SalesPersonQuotaHistory
AFTER INSERT
AS RAISERROR ('Notify Compensation', 16, 10);
GO

Ayrıca bkz.

Başvuru

Kavramlar