(Transact-SQL) TRIGGER CREATE

DML, DDL veya oturum açma tetikleyicisi oluşturur.Tetikleyici, veritabanı sunucusu bir olay meydana geldiğinde otomatik olarak yapar, saklı yordam özel bir türüdür.DML tetikleyiciler, kullanıcı veri işleme dili (DML) ile veri değiştirmeye çalıştığında yürütmek olay.DML olay INSERT, UPDATE ya da DELETE ifadeleri bir tablo veya Görünüm.

Not

, Bu tetikleyici harekete herhangi bir geçerli olay tüm tablo satırları etkilenir olup olmadığına bakılmaksızın tetiklenir.

DDL tetikleyiciler, veri tanımlama dili (DDL) olayları çeşitli yanıt çalıştırabilirsiniz.Bu olaylar öncelikle karşılık gelirTransact-SQLCREATE, ALTER ve DROP deyimleri ve belirli sistem saklı yordamları gerçekleştiren DDL benzeri işlemleri.Oturum açma, kullanıcı oturumları harekete geçirilen oturum açma olayına yanıt olarak tetikleyici yangın kurulmasını.Triggers can be created directly from Transact-SQL statements or from methods of assemblies that are created in the Microsoft .NET Framework common language runtime (CLR) and uploaded to an instance of SQL Server.SQL Server allows for creating multiple triggers for any specific statement.

Security noteSecurity Note:

Tetikleyici içinde kötü amaçlı kod escalated ayrıcalıklarıyla çalışır.Bu tehdide etkisini azaltmak daha fazla bilgi için bkz:Tetikleyici güvenliği yönetme.

Topic link iconTransact-SQL sözdizimi kuralları

Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger)
CREATE TRIGGER [ schema_name . ]trigger_name 
ON { table | view } 
[ WITH <dml_trigger_option> [ ,...n ] ]
{ FOR | AFTER | INSTEAD OF } 
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } 
[ WITH APPEND ] 
[ 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 STATISTICS statement (DDL Trigger)
CREATE TRIGGER trigger_name 
ON { ALL SERVER | DATABASE } 
[ WITH <ddl_trigger_option> [ ,...n ] ]
{ FOR | AFTER } { event_type | event_group } [ ,...n ]
AS { sql_statement  [ ; ] [ ,...n ] | 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)
CREATE 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 tetikleyicisi olduğu şema adıdır.DML triggers are scoped to the schema of the table or view on which they are created.schema_name cannot be specified for DDL or logon triggers.

  • trigger_name
    Tetikleyici adıdır.Atrigger_namekuralları ile uyumlu olmalıdırtanımlayıcılar , dışında trigger_namebaşlatılamıyor # ile ya da ##.

  • table | view
    Tablo veya Görünüm DML tetikleyicisi yürütülür ve bazen tetikleyici tablo veya tetikleyici görünüm olarak adlandırılır belirtilir.Tablo veya Görünüm tam adını belirten isteğe bağlıdır.Görünüm, yalnızca bir INSTEAD OF tetikleyicisi başvurulabilir.DML tetikleyiciler, yerel veya global geçici tablolar tanımlanamaz.

  • database.
    Kapsamının geçerli bir DDL tetikleyicisi geçerli veritabanına.Belirtilmezse, tetikleyici harekete herevent_typeorevent_groupgerçekleşir, geçerli veritabanı.

  • TÜM SUNUCU
    DDL veya oturum açma tetikleyici kapsamını, geçerli sunucu için geçerlidir.Belirtilmezse, tetikleyici harekete herevent_typeorevent_groupoluşuyor herhangi bir geçerli.

  • ŞİFRELEME
    CREATE TRIGGER deyim metni obfuscates.Tetikleyici şu anda yayımlanmış bir parçası olarak gelen kullanarak WITH şifreleme engellerSQL Serverçoğaltma.şifreleme için CLR tetikleyici belirtilemez.

  • yürütmek OLARAK
    Tetikleyici yürütüldüğü güvenlik bağlamını belirtir.Örnek kullanıcı hesabı denetimi sağlayan,SQL ServerTetikleyici. başvurulan tüm veritabanı nesnelerinin izinlerini doğrulamak için kullandığı

    Daha fazla bilgi için bkz:yan tümce (Transact-SQL) yürütmek.

  • İÇİN | SONRA
    SONRA tüm işlemlerini tetikleyici SQL'de belirtildiğinde DML tetikleyicisi harekete belirtir deyim başarıyla yürütüldü.Bu tetikleyici harekete önce tüm bilgi art arda sıralı eylemleri ve sınırlama denetimleri de başarılı.

    Sonra varsayılan olduğu için belirtilen tek anahtar sözcük.

    Sonra Tetikleyiciler olamaz tanımlı görünümler.

  • YERİNE
    DML tetikleyicisi yürütülmesi gerektiğini belirtiryerinetetikleyici ifadeleri. eylemleri geçersiz kılma tetikleyici SQL deyim, bu nedenle, Bunun yerine OF DDL veya oturum açma için tetikleyici belirtilemez.

    En fazla bir INSTEAD OF INSERT, UPDATE veya DELETE deyim her tetikleyici bir tablo ya da görünüm üzerinde tanımlanabilir.Ancak, her görünüm, kendi INSTEAD OF tetikleyicisi olduğu görünümlerinde görünüm tanımlayabilirsiniz.

    INSTEAD OF triggers are not allowed on updatable views that use WITH CHECK OPTION.SQL Server raises an error when an INSTEAD OF trigger is added to an updatable view WITH CHECK OPTION specified.Kullanıcı bu seçeneği, ALTER VIEW INSTEAD OF tetikleyicisi tanımlamadan önce kullanarak kaldırmanız gerekir.

  • {[DELETE] [,] [EKLE] [,] [GÜNCELLEŞTİRME]}
    Buna karşı denenir, DML etkinleştiren veri değiştirme deyimleri harekete belirtir tablo veya Görünüm.En az bir seçenek belirtilmeli.Bu seçenekler istediğiniz sırada herhangi bir bileşimini tetikleyici tanımı içinde izin verilir.

    İçin INSTEAD OF Tetikleyicileri, DELETE seçeneği ON DELETE basamaklı eylem belirten bilgi ilişkisi olan tablolara izin verilmiyor.Benzer şekilde, bir ON UPDATE basamaklı eylem belirten bilgi ilişkisi olan tabloyu güncelleştir seçeneğini izin verilmez.

  • event_type
    Adı birTransact-SQLDil olay neden olan, yürütme sonrasında DDL tetikleyicisi yangın.Geçerli olaylara ait DDL listelenenDDL olayları.

  • event_group
    Önceden tanımlanmış bir grup adıTransact-SQLDil olay.The DDL tetiği harekete sonra yürütmeTransact-SQLolay, ait olduğu dilievent_group.Geçerli olay gruplara ait DDL listelenenDDL olay grupları (ingilizce).

    Sonra CREATE TRIGGER, çalışmasını bitirdievent_groupaynı zamanda çalışır gibi bir makro ekleyerek olay türlerini kapsayan sys.trigger_events Katalog görünümü.

  • İLE EKLEME
    Varolan bir tür ek bir tetikleyici eklenmesi gerektiğini belirtir.Tetikleyici açıkça belirtilen sonra APPEND ile INSTEAD OF Tetikleyicileri veya ise kullanılamaz.APPEND ile için kullanılan tek zaman, INSTEAD OF AFTER, isterse geriye doğru uyumluluk nedenleriyle belirtilen olabilir.DIŞ ad belirtilmezse, APPEND ile belirtilemez (yani, tetikleyici CLR tetikleyicisi ise).

    Important noteImportant Note:

    WITH APPEND will be removed in the next version of Microsoft SQL Server.Değil yeni geliştirme çalışması ile APPEND kullanın ve şu anda onu kullanan uygulamalar değiştirmek planlama.

  • ÇOĞALTMA İÇİN DEĞİL
    Tetikleyici söz konusu tabloyu çoğaltma aracısı değiştirir, tetikleyici yürütülmelidir değil, gösterir.Daha fazla bilgi için bkz:Sınırlamaları, kimlik ve Tetikleyicileri NOT ile denetlemek IÇIN çoğaltma.

  • sql_statement
    Tetikleyici, koşullar ve eylemler belirtilir.Tetikleyici koşullarının denenmiş DML, DDL veya oturum açma olayları Tetikleyici eylemleri neden olup olmadığını belirleyen ek ölçütler belirlemek.

    Belirtilen Tetikleyici eylemleriTransact-SQLifadeleri geçerli işlemi çalıştığında gidin.

    Herhangi bir sayı ve tür tetikleyici içerebilir,Transact-SQLifade özel durum.Daha fazla bilgi için bkz: Notlar.Tetikleyici denetlemek veya bir veri değişikliği veya tanımını ekstresinde verilerini değiştirmek için tasarlanmıştır; bu verileri kullanıcıya döndürmelidir..The Transact-SQL statements in a trigger frequently include control-of-flow language.

    DML Tetikleyiciler silinen ve eklenen mantıksal (kavramsal) tablolarını kullanın.Bunlar, tetikleyici tanımlı, tabloya başka bir deyişle, kullanıcı eylem çalıştığınız tablo structurally benzer.Eski değerleri veya kullanıcı eylem tarafından değiştirilen satırları yeni değerler silinir ve eklenmiş tabloları tutun.İçindeki tüm değerleri almak için örneğin,deletedTablo, kullanma:

    SELECT *
    FROM deleted
    

    Daha fazla bilgi için bkz:Eklenen ve silinen tablolar'ı kullanma.

    DDL ve oturum açma Tetikleyicileri kullanarak tetikleyici olay hakkında bilgi yakalamakEVENTDATA (Transact-SQL)işlev.Daha fazla bilgi için bkz:EVENTDATA işlevini kullanarak.

    SQL Servergüncelleştirme sağlartext,ntext, orimagesütunları ile INSTEAD OF tetiklemesi tablo veya Görünüm.

    Important noteImportant Note:

    ntext, text, and image data types will be removed in a future version of Microsoft SQL Server.Yeni geliştirme çalışması bu veri türlerini kullanmaktan kaçının ve şu anda kullanan uygulamalar değiştirmek planlama.Kullanımınvarchar(max)varchar(max) , varbinary(max) yerine. Hem sonra ve INSTEAD OF tetikleyen desteğivarchar(MAX),nvarchar(MAX), vevarbinary(MAX)veri eklenen ve silinen tablo.

  • < method_specifier >
    İçin CLR tetikleyicisi, tetikleyici ile bağlamak için derleme yöntem belirtir.The method must take no arguments and return void.class_name must be a valid SQL Server identifier and must exist as a class in the assembly with assembly visibility.Sınıf bir ad alanı tam ad, kullanım,. ' ad alanı bölümleri birbirinden ayırmak için sınıf adı [] ile sınırlandırılmış gerekir veya "" sınırlayıcı.Sınıf, iç içe geçmiş bir sınıfı olamaz.

    Not

    Varsayılan olarak, özelliğiSQL ServerCLR çalıştırılacak kodudur kapatır.Oluşturabilir, değiştirebilir ve yönetilen kod modülleri, başvuru veritabanı nesnelerini bırakın, ancak bu. yürütmek örnekSQL ServersüreceCLR seçeneği etkinsp_configure kullanılarak etkinleştirilir.

Remarks

DML Tetikleyicileri

DML triggers are frequently used for enforcing business rules and data integrity.SQL Server provides declarative referential integrity (DRI) through the ALTER TABLE and CREATE TABLE statements.Ancak, DRI veritabanları arası bilgi sağlamaz bütünlük.Başvuru bütünlük tabloların birincil ve yabancı anahtarlar arasındaki ilişkileri hakkında kurallar anlamına gelir.Bilgi tutarlılığını zorlamak için ALTER tablo ve CREATE tablo birincil anahtar ve yabancı anahtar kısıtlamaları'nı kullanın.Tetikleyici üzerinde kısıtlamalar varsa tablo, INSTEAD OF tetikleyicisi yürütme sonra ve AFTER tetikleyicisi yürütme önce denetlenir.Kısıtlamaları ihlal INSTEAD OF tetikleyicisi işlemler geri alınır ve AFTER tetikleyicisi harekete geçirdi.

İlk ve sonra tablo üzerinde yürütülecek Tetikleyiciler sp_settriggerorder kullanılarak belirtilebilir.Tek bir ilk ve tek son tetikleyici sonra her INSERT, UPDATE ve DELETE işlemi belirtilebilir bir tablo.Varsa diğer AFTER tetikleyicisi aynı tablo, rasgele yürütülür.

İlk veya son tetikleyici bir ALTER TRIGGER deyim değişir, değiştirilmiş tetikleyici ilk veya son özniteliği çıkarılır ve sp_settriggerorder kullanarak sipariş değeri sıfırlanması gerekir.

Bir AFTER tetikleyicisi yalnızca tetikleyici SQL deyim başarıyla yürüttü sonra yürütülür.Bu başarılı yürütme, tüm bilgi art arda sıralı eylemleri ve güncelleştirildi veya silindi nesneyle ilişkili sınırlama denetimi içerir.

Tetikleyici INSTEAD OF tetikleyicisi yeniden normal harekete tabloda bir deyim tablo üzerinde tanımlı bir INSTEAD OF tetikleyicisi yürütür, art arda çağrılmaz.Bunun yerine tablo INSTEAD OF tetikleyicisi yok olduğu ve kısıtlama işlemlerini ve tetikleyici yürütme sonra zinciri başladığı gibi deyim işlenir.Örneğin, bir tetikleyici bir tablo için bir INSTEAD OF INSERT tetikleyicisi olarak tanımlanır ve tetikleyici aynı tabloda INSERT deyim yürütür, INSTEAD OF tetikleyicisi tarafından yürütülen INSERT deyim tetikleyici yeniden çağırmaz.Tetikleyici tarafından yürütülen Ekle kısıtlama eylemleri gerçekleştiren ve sonra INSERT tetikleyicilerini tablo için tanımlanmış bir tetikleme başlatır.

Bir görünümü tanımlanmış bir INSTEAD OF tetikleyicisi INSTEAD OF tetikleyicisi yeniden normal harekete analiz görünümünün karşı bir deyim yürütür, art arda çağrılmaz.Bunun yerine, deyim görünümü altındaki temel tablolara yönelik değişiklikler olarak giderilmiştir.Bu durumda, Görünüm tanımını güncellenebilir bir görünüm için tüm kısıtlamalarını karşılaması gerekir.Güncellenebilir görünümler, bir tanımı için bkz:Bir görünümü kullanarak verileri değiştirme.

Örneğin, tetikleyici bir UPDATE INSTEAD OF tetikleyicisi görünümü olarak tanımlanır ve tetikleyici aynı görünüme başvuran bir UPDATE deyim yürütür, yürütülen INSTEAD OF tetikleyicisi UPDATE deyiminin tetikleyici yeniden çağırmaz.Görünümü bir INSTEAD OF tetikleyicisi yok gibi tetik tarafından yürütülen GÜNCELLEŞTİRMEYİ görünüme göre işlenir.Tek bir temel tablo güncelleştirme tarafından değiştirilen sütunları çözümlenmesi gerekir.Her değişiklik için temel bir temel tablo kısıtlamaları uygulamak ve sonra tablo için tanımlanmış Tetikleyiciler tetikleme zinciri başlar.

UPDATE ve INSERT eylemler belirli sütunlar için sınama

Tasarlamak birTransact-SQLTetikleyici belirli eylemleri gerçekleştirmek için temel UPDATE ya da INSERT değişiklikler belirli sütunlar.KullanımıUPDATE() veya gövde metninde tetikleyici için bu amaçla. ms186329(v=sql.100).md COLUMNS_UPDATEDUPDATE(), UPDATE ya da INSERT bir sütun üzerinde çalıştığı için sınar.COLUMNS_UPDATED birden fazla sütunda yapılan UPDATE ya da INSERT eylemler için sınar ve hangi sütunların eklenen veya güncelleştirilen gösteren bir bit deseni verir.

Tetikleyici kısıtlamaları

CREATE TRIGGER toplu iş iş iş, ilk deyim olmalıdır ve yalnızca bir tablo uygulayabilirsiniz.

Yalnızca geçerli veritabanında bir tetikleyici oluşturulur; ancak tetikleyici geçerli veritabanının dışında kalan nesneler başvuruda bulunabilir.

Tetikleyici alabilmek için tetikleyici şema adı belirtilmezse, aynı şekilde tablo adı geçerli.

Aynı tetikleyici eylem için birden fazla kullanıcı eylemi (örneğin INSERT ve UPDATE) aynı CREATE TRIGGER deyim olarak tanımlanabilir.

Bunun yerine OF DELETE/UPDATE tetikleyiciler, tanımlanamaz bir tablo olan yabancı anahtar bir art arda ile tanımlanan DELETE/UPDATE eylem.

Tetikleyici içinde herhangi bir küme ifadesini belirtilebilir.küme seçeneğe yürütülmesini tetikleyiciyi etkin olarak kalır ve daha sonra önceki ayarına geri döner.

Bir tetiği harekete, sonuçlar arama uygulamasına olduğu gibi saklı yordamlar ile veriliyor.Önlemek için bir tetikleyici firing nedeniyle uygulamaya döndürülen sonuçlar olması, sonuçlar SELECT deyimi ya da bir tetikleyici değişken atama yapan ifadeler dahil etmeyin.Sonuçları kullanıcıya SELECT deyimi ya da değişken atama yapan bir ifadeyi içeren tetikleyici özel işlem gerektirir; döndürülen sonuçlar tetikleyicisi tabloya yapılan değişiklikler, izin verilen her uygulamaya yazılması gerekir.Değişken atama de tetikleyici bulunması gerekir, tüm sonuç kümelerini dönüşü önlemek için tetikleyici başında küme NOCOUNT deyim kullanın.

TRUNCATE tablo deyim DELETE deyim geçerli olmasına karşın, işlem tek satır silme oturum için bir tetikleyici etkinleştirmez.Ancak, yalnızca izni olan kullanıcılar yürütmek TRUNCATE tablo deyim DELETE Tetik böylece yanlışlıkla circumventing hakkında endişe.

WRITETEXT deyim, oturum açmış veya unlogged, tetikleyici etkinleştirmez.

AşağıdakiTransact-SQLdeyimleri de DML tetikleyicisi izin verilmiyor:

VERİTABANINI DEĞİŞTİR

VERİTABANI OLUŞTURMA

VERİTABANINI BIRAKMA

YÜKLEME VERİTABANI

YÜKLEME GÜNLÜĞÜ

RECONFIGURE

VERİTABANINI GERİ YÜKLE

GÜNLÜK GERİ YÜKLEME

 

Ayrıca, aşağıdakiTransact-SQLifadeleri karşı kullanıldığında DML tetikleyicisi gövdesi içinde verilmez tablo veya hedefi tetikleyici eylem.

CREATE INDEX (CREATE KAYMA INDEX ve XML CREATE INDEX dahil)

DİZİN DEĞİŞTİRME

BIRAKMA DİZİNİ

DBCC DBREINDEX

BÖLÜM İŞLEVİNİ DEĞİŞTİR

TABLOYU BIRAK

ALTER aşağıdakileri yapmak için kullanıldığında tablo:

  • Ekleme, değiştirme veya sütun bırakın.

  • Bölümleri geçin.

  • birincil anahtar veya UNIQUE kısıtlamaları veya ekleyin.

 

 

Not

ÇünküSQL Serverkullanıcı tanımlı Tetikleyicileri desteği, sistem tablolarına, kullanıcı tanımlı tetikleyiciler sistem tabloları. oluşturma, öneririz

DDL Triggers

Tetikleyiciler (DDL), standart tetikleyiciler gibi yürütmek saklı yordamlar bir olaya yanıt olarak.Ancak, standart tetikler farklı olarak, UPDATE, INSERT ve DELETE deyimlerini tablo veya Görünüm yanıt yürütmek değil.Bunun yerine, birincil veri tanımlama dili (DDL) deyimleri yanıt çalıştırabilirsiniz.Bunlar, CREATE, ALTER, DROP, GRANT, DENY, REVOKE ve güncelleştirme istatistikleri ifadeleri içerir.DDL benzeri işlemleri belirli sistem saklı yordamları da DDL tetikleyici harekete.

Important noteImportant Note:

DDL tetikleyiciler sistem saklı yordam çalıştırmayı kendi yanıtlarını belirlemek için sınayın.Saklı yordamlar bir CREATE_TYPE oluşturan DDL tetikleyicisi harekete (örneğin, CREATE TYPE deyim sp_addtype ve sp_rename için olay.

DDL tetikleyiciler hakkında daha fazla bilgi için bkz:DDL Tetikleyicileri.

DDL tetikleyiciler, yerel veya global geçici tablolar ve saklı yordamlar etkileyen olaylara yanıt olarak harekete değil.

DML tetikleyiciler, DDL Tetikleyiciler şemalara kapsamına eklenir değildir.Bu nedenle, OBJECT_ID, OBJECT_NAME, OBJECTPROPERTY ve OBJECTPROPERTYEX gibi işlevler DDL tetikleyiciler hakkında meta veriler sorgulamak için kullanılamaz.Katalog görünümlerini kullanın.Daha fazla bilgi için bkz:DDL Tetikleyicileri hakkında bilgi alma.

Not

Sunucu kapsamlı DDL Tetikleyiciler görünürSQL Server Management StudioObject Explorer'ınTetikleyiciler folder.Bu klasörün altında bulunanSunucu nesnesi sayısı folder.Veritabanı kapsamlı DDL Triggers görünürVeritabanı Tetikleyicileri folder.Bu klasörün altında bulunanProgramlama karşılık gelen veritabanı. klasörü

Oturum açma Tetikleyicileri

Oturum açma Tetikleyiciler yanıt olarak bir oturum açma saklı yordamları yürütmek olay.örnek olan bir kullanıcı oturum oluşturulur, bu olay ortayaSQL Server.Oturum açma Tetikleyiciler tamamladığında oturum kimlik doğrulaması aşama sonra harekete, ancak önce kullanıcı oturumu gerçekten oluşturulur.Nedenle, genellikle kullanıcı, hata iletileri ve PRINT deyimini iletilerden ulaşmak tetikleyici içinde gelen tüm iletileri divertedSQL Serverhata günlüğüDaha fazla bilgi için bkz:Oturum açma Tetikleyicileri.

Oturum açma Tetikleyiciler değil harekete, kimlik doğrulaması başarısız oluyor.

Dağıtılmış işlemler de oturum açma tetikleyici desteklenmez.Dağıtılmış bir işlem içeren bir oturum açma tetikleyici harekete geçirilir, 3969 hata verir.

Genel tetikleyici etkenleri

Sonuçlar döndürülüyor

SQL Server'ın gelecekteki bir sürümüne Tetikleyiciler sonuçlar döndürmesine olanak kaldırılır.Sonuç kümeleri Tetikleyiciler ile çalışmak üzere tasarlanmış uygulamalar beklenmeyen davranışlara neden olabilir.Tetikleyiciler yeni geliştirme çalışması sonuç kümeleri döndüren kaçının ve şu anda bunu uygulamaları değiştirmek planlama.sonuçlar kümeleri döndüren gelen Tetikleyiciler önlemek için kümeTetikleyiciler seçeneği sonuçlar izin verme to 1.

Döndürülecek sonuçlar kümesi oturum açma Tetikleyiciler her zaman izin verme ve bu davranış yapılandırılamaz.Bir sonuç kümesi oturum açma tetikleyici oluşturmak, tetikleyici yürütmek başarısız olur ve tetikleyici harekete oturum açma girişimi reddedilir.

Birden çok Tetikleyicileri

SQL Server birden çok tetikleyici her DML, DDL veya oturum açma oluşturulmasına olanak olay.CREATE TRIGGER FOR UPDATE bir UPDATE tetikleyicisi olan bir tablo için çalıştırılır, örneğin, bir ek bir güncelleştirme tetiği oluşturulur.Önceki sürümlerindeSQL ServerINSERT, UPDATE veya DELETE her veri değiştirme olayı için yalnızca bir tetikleyici izin her tablo.

Recursive Triggers

SQL Server Ayrıca ALTER DATABASE kullanarak RECURSIVE_TRIGGERS ayarı etkinleştirildiğinde, tetikleyiciler, özyinelemeli çağrı için izin verir.

Gerçekleşmesi için özyineleme aşağıdaki türlerde etkinleştirme Özyinelemeli tetikler:

  • Dolaylı özyineleme olabilir

    Dolaylı özyineleme ile bir uygulama tablo T1 güncelleştirir.Bu güncelleştirme tablo T2 TR1, tetikleyici harekete.Bu senaryoda, tetikleyici T2 sonra harekete ve T1 tablo güncelleştirir.

  • Doğrudan özyineleme

    Doğrudan özyineleme ile uygulama tablo T1 güncelleştirir.Bu güncelleştirme tablo T1 TR1, tetikleyici harekete.T1 tablo güncelleştirildiği için TR1 geçirilir yeniden vb. tetikler.

Aşağıdaki örnek, her iki tetikleyici dolaylı ve doğrudan özyineleme varsayın T1 tablo iki güncelleştirme tetikleyiciler, TR1 ve TR2, tanımlanmış olan kullanır.Tetikleyici TR1 tablo T1 yinelemeli olarak güncelleştirir.Bir UPDATE deyim her TR1 ve TR2 saat çalıştırılır.Ayrıca, TR1 yürütülmesi TR1 yürütülmesini tetikleyen (yinelemeli olarak) ve TR2.Belirli bir tetikleyicinin eklenen ve silinen tablo yalnızca tetikleyici çağrılan UPDATE deyim uygun satırları içerir.

Not

Önceki davranış yalnızca RECURSIVE_TRIGGERS ayarı, ALTER DATABASE kullanarak etkinleştirilmişse oluşur.Belirli bir olay için tanımlanmış birden çok tetikleyici yürütüldüğü tanımlı hiçbir emri yok.Her tetikleyici bağımsız olması gerekir.

RECURSIVE_TRIGGERS ayarı devre dışı bırakmak, yalnızca doğrudan recursions engeller.Ayrıca, dolaylı özyineleme devre dışı bırakmak için küme 0 sp_configure kullanarak iç içe Tetikleyiciler sunucu seçeneği.

Yok daha fazla tetikleyici Tetikleyiciler herhangi biri iç içe düzey ne olursa olsun bir ROLLBACK TRANSACTION gerçekleştirir, yürütülür.

İç içe Tetikleyiciler

Tetikleyiciler, maksimum 32 düzeye kadar iç içe kullanılabilir.Tetikleyici bir tablo var olduğu başka bir tetikleyici değişirse, ikinci Tetikleyici etkinleştirildiğinde ve arayabilir sonra üçüncü bir tetikleyici ve benzeri.Sonsuz bir döngüye zincirindeki herhangi bir tetikleyici ayarlar, iç içe geçmiş düzeyini aştı ve tetikleyici iptal edilir., BirTransact-SQLTetikleyici, başvuru türü bir CLR yordam tarafından yönetilen kod çalıştırılır veya toplamak, bu başvuruyu sayar gibi bir düzey karşı 32 düzey iç içe geçmiş sınırı.Yönetilen kod açılmak istenen yöntem bu sınırınızı sayma

İç içe tetikleyiciler devre dışı bırakmak için küme iç içe Tetikleyiciler seçeneğini sp_configure için 0 (kapalı).İç içe Tetikleyiciler için varsayılan yapılandırma sağlar.İç içe tetikleyiciler devre dışı ise, Özyinelemeli tetikler de devre dışı, ALTER DATABASE kullanarak RECURSIVE_TRIGGERS ayarı ne olursa olsun.

Not

InSQL Server 2000, her tetikleyici, tetikleyici ne zaman harekete bir INSTEAD OF içinde iç içe sonranested triggerssunucu yapılandırma seçeneği, kapatır.InSQL Server 2005veya daha sonra tetikleyici bir INSTEAD OF tetikleyicisi geçirilir bile içinde iç içe ilknested triggerssunucu yapılandırma seçeneğini 0 olarak küme.Ancak, bu ayarı daha sonra tetikleyici harekete değil.Uygulamaları yine de, iş kuralları ile ilgili olarak bu davranış uygun olup olmadığını belirlemek iç içe Tetikleyiciler için uygulamaları gözden geçirmenizi öneririz,nested triggerssunucu yapılandırma seçeneğini 0 olarak küme ve sonra uygun değişiklikleri.

Ertelenen ad çözümlemesi

SQL Serveriçin verirTransact-SQLsaklı yordamları ve tetikleyicileri, toplu işlemi için başvuran tablolara, yok derleme saat.Bu özellik, ertelenmiş ad çözümlemesi denir.Ancak,Transact-SQLsaklı yordam, tetikleyici ya da toplu iş iş gösterir saklı yordam veya tetiği içinde tanımlanan bir tabloyu, bir uyarı oluşturulması sırasında verilen saat uyumluluk düzey ayarı 65 ise.toplu iş iş kullanılırsa, derleme zamanında uyarısı verilir.Çalışma sırasında bir hata iletisi verilir ne saat saat tablo başvurulan yok.Daha fazla bilgi için bkz:Ertelenen ad çözümlemesi ve derleme.

İzinler

Bir DML oluşturmak için tablo veya görünümü, tetikleyici oluşturulan ALTER iznine tetikleyicisi gerektirir.

Sunucuyla DDL tetikleyicisi oluşturmak kapsam (tüm sunucu açık) veya CONTROL SERVER izin sunucuda oturum açma tetikleyici gerekiyor.Bir DDL oluşturmak için tetikleyici veritabanı kapsamlı (ON DATABASE) geçerli veritabanını ALTER ANY DATABASE DDL tetikleyicisi izin gerektirir.

Örnekler

C.Bir anımsatıcı iletisi DML tetikleyicisi kullanma

Herhangi bir kişi eklemek veya verileri değiştirmek çalıştığında aşağıdaki DML tetikleyicisi istemciye bir ileti yazdırırCustomerTablo.

B.Bir anımsatıcı e-posta iletisi DML tetikleyicisi kullanma

Aşağıdaki örnek, belirli bir kişiye e-posta iletisine gönderir ( MaryM),Customertabloda değişiklik.

C.PurchaseOrderHeader ve satıcı tabloları arasındaki bir iş kuralı uygulamak için DML sonra Tetikleyici kullanma

CHECK kısıtlamaları yalnızca tablo düzey ya da sütun düzey kısıtlaması tanımlandığı sütunlara başvurabilir için bir çapraz tablo kısıtlamaları (Bu örnekte, iş kuralları), tetikleyici tanımlanması gerekir.

Aşağıdaki örnek, DML tetikleyicisi oluşturur.Yeni bir satınalma siparişi ekleme girişimi yapıldığında satıcı iyi olduğu için Kredi notu emin olmak için bu tetikleyici denetlerPurchaseOrderHeaderTablo.Satıcının Kredi notu elde etmek içinVendorTablo gerekir başvurulan.Kredi notu çok düşüktür, bir ileti görüntülenir ve ekleme değil çalıştırmak.

D.Ertelenen ad çözümleme kullanma

Aşağıdaki örnek göstermek iki DML tetikleyicilere oluşturur ertelenmiş adı çözümlemesi.

E.Veritabanı kapsamlı DDL tetikleyicisi kullanma

Aşağıdaki örnek, iptal bir veritabanında bulunan tüm eş önlemek için DDL tetikleyicisi kullanır.

F.Sunucu kapsamı DDL tetikleyicisi kullanma

Aşağıdaki örnek, herhangi bir CREATE DATABASE olayı gerçekleşir geçerli sunucu örneği ve kullanıyorsa, ileti yazdırmak için DDL tetikleyicisi kullanırEVENTDATAbuna karşılık gelen metni almak için işlevTransact-SQLdeyim.

Not

Daha fazla örnek EVENTDATA DDL Tetikleyiciler olarak kullanmak için bkz:EVENTDATA işlevini kullanarak.

G.Oturum açma Tetikleyici kullanma

Aşağıdaki örnek oturum açma tetikleyici oturum açmak için bir girişimi engellerSQL Serverbir üyesi olaraklogin_testoturum açma, zaten üç kullanıcı oturumu altında çalışan vardır., oturum açma.

H.Bir tetiğin ateşlenmesine neden olan olayları görüntüleme

The following example queries the sys.triggers and sys.trigger_events catalog views to determine which Transact-SQL language events cause trigger safety to fire.safety is created in the previous example.

Değişiklik Geçmişi

Güncelleştirilmiş içerik

Olarak sunulan bir davranış değişikliği tanımlayan açıklamaları, ' Tetikleyicileri iç içe ' bölümüne bir not eklendiSQL Server 2005sonra tetikleyici yuvalanmış içinde bir INSTEAD OF tetikleyicisi.

Bu tetikleyici dağıtılmış hareketleri desteklemek gösteren ' oturum açma Tetikleyicileri' bölümündeki bilgiler eklendi.

Sp_rename saklı yordamı herhangi bir DDL tetikleyici harekete yanlış deyim kaldırıldı.

See Also

Reference

Other Resources