ddl Tetikleyicileri

ddl Tetikleyicileri oluşturma, değiştirme veya veritabanı nesnelerini silmek veritabanı veya sunucu işlemlerini denetlemek veya bunlar yapılmadan önce ddl deyimleri, iş kurallarını uygulamak emin olmak için kullanabilirsiniz. ddl Tetikleyicileri ateş çeşitli veri tanımlama dili (ddl) olaylar karşısında. Bu olaylar öncelikle karşılık Transact-SQLOluştur, alter, drop, grant, deny, revoke veya update STATISTICS kelimelerle başlayan ifadeler. DDL benzeri işlemler gerçekleştiren bazı sistem saklı yordamları da ayrıca DDL tetikleyicilerini çalıştırabilir.

Önemli notÖnemli

Çalışan sistem saklı yordamlar onların yanıt belirlemek için ddl Tetikleyiciler sınayın. Örneğin create type deyimi ve sp_addtype saklı yordam hem de yangın bir ddl tetikleyici bir create_type olayı oluşturulur.

Aşağıdakileri yapmak istediğinizde ddl Tetikleyiciler kullanın:

  • Sizin veritabanı şeması için belirli değişiklikleri önlemek istiyoruz.

  • Veritabanında veritabanı şeması değişikliği karşısında ortaya bir şey istiyorum.

  • Veritabanı şema değişiklikleri veya olayları kaydetmek istediğiniz.

ddl Tetikleyicileri türleri

  • Transact-sql ddl tetikleyici
    Özel bir tür Transact-SQLsaklı yordamı yürütür, bir daha Transact-SQLdeyimleri sunucu kapsamı veya veritabanı kapsamlı bir olay. Örneğin, ddl tetikleyici alter server yapılandırması gibi bir deyimi yürütüldüğünde veya tablo drop table kullanarak silinirse, ateş.

  • clr ddl tetikleyici
    Yürütme yerine bir Transact-SQLsaklı yordamı, bir clr tetikleyici yürütür veya bir kurul üyesi olan yönetilen kodunda yazılmış daha yöntemlerinin oluşturulmuş.net Framework ve de yüklenen SQL Server.

ddl Tetikleyicileri, onları çalıştırılan Bu tetikleyici ddl deyimleri yalnızca sonra yangın. ddl Tetikleyiciler ıNSTEAD OF Tetikleyiciler olarak kullanılamaz. DDL tetikleyicileri, yerel veya küresel geçici tabloları ve saklı yordamları etkileyen olaylara yanıt olarak çalışmaz.

ddl Tetikleyicileri oluşturma özel insertedve deletedtabloları.

ddl tetikleyici ve tetikleyici tarafından kaynaklanan değişiklikler yangınları bir olayla ilgili bilgileri eventdata işlevini kullanarak ele geçirildi.

Birden çok tetikleyici her ddl olay için oluşturulacak.

DML tetikleyicilerinden farklı olarak DDL tetikleyicilerinin kapsamı şemalarla sınırlı değildir. Dolayısıyla OBJECT_ID, OBJECT_NAME, OBJECTPROPERTY ve OBJECTPROPERTYEX gibi işlevler DDL tetikleyicilerinin meta verilerini sorgulamak için kullanılamaz. Bunun yerine katalog görünümlerini kullanın.

SQL Server Management Studio nesne Explorer'da sunucu kapsamı ddl Tetikleyiciler görünür Tetikleyicileri ağıl. Bu klasörün altında bulunan Sunucu nesneleri ağıl. Veritabanı kapsamlı ddl Tetikleyicileri görünür Veritabanı Tetikleyiciler ağıl. Bu klasörün altında bulunan programlama klasörü karşılık gelen veritabanı.

Güvenlik notuGüvenlik Notu

Tetikleyiciler içindeki kötü amaçlı kod yükseltilmiş ayrıcalıklar altında çalışabilir. Bu tehdidin azaltılmasına yardımcı olma hakkında daha fazla bilgi için bkz: Tetikleyici güvenliği yönetme.

ddl tetikleyici kapsam

ddl Tetikleyiciler yangın karşısında bir Transact-SQLolay işleme geçerli veritabanında veya geçerli sunucu. Tetikleyici kapsam olaya bağlıdır. create_table olay veritabanı veya sunucu örneği üzerinde olduğunda, oluşturulan create_table olayına yanıt olarak ateşlenmesine ddl tetikleyici yapabilirsiniz. Oluşturulan bir CREATE_LOGIN olayına yanıt olarak ateşlenmesine ddl tetikleyici, sadece bir CREATE_LOGIN olayı sunucu örneği oluştuğunda yapabilirsiniz.

Aşağıdaki örnekte, ddl tetikleyici safetyne zaman-ecek ateş bir DROP_TABLEya ALTER_TABLEOlay ortaya veritabanında.

CREATE TRIGGER safety 
ON DATABASE 
FOR DROP_TABLE, ALTER_TABLE 
AS 
   PRINT 'You must disable Trigger "safety" to drop or alter tables!' 
   ROLLBACK;

Aşağıdaki örnek, eğer herhangi bir ddl tetikleyici bir ileti yazdırır CREATE_DATABASEOlay ortaya geçerli sunucu örneği. Örnek EVENTDATAilgili metin almak için işlevi Transact-SQLdeyimi. eventdata ddl Tetikleyiciler ile kullanma hakkında daha fazla bilgi için bkz: eventdata işlevini kullanma.

IF EXISTS (SELECT * FROM sys.server_triggers
    WHERE name = 'ddl_trig_database')
DROP TRIGGER ddl_trig_database
ON ALL SERVER;
GO
CREATE TRIGGER ddl_trig_database 
ON ALL SERVER 
FOR CREATE_DATABASE 
AS 
    PRINT 'Database Created.'
    SELECT EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')
GO
DROP TRIGGER ddl_trig_database
ON ALL SERVER;
GO

Harita listeleri Transact-SQL, bunlar için belirtilen kapsamlar ifadelerini "seçme bir belirli ddl bildirimi için yangın bir ddl tetikleyici," bölümünde sağlanan bağlantıları aracılığıyla Bu konudaki.

Veritabanı kapsamlı ddl Tetikleyicileri içinde oluşturuldukları veritabanı nesnelerinde depolanır. ddl Tetikleyiciler olarak oluşturulabilir ana veritabanı ve kullanıcı tarafından tasarlanmış veritabanlarını oluşturulanlar gibi davranır. Sorgulayarak ddl Tetikleyiciler hakkında bilgi edinebilirsiniz sys.triggers Katalog görünümü. Sen sorgu sys.triggers Tetikleyici oluşturulduğu veya veritabanı adı gibi bir tanımlayıcı olarak belirterek veritabanı içeriğinde master.sys.triggers.

Sunucu kapsamlı ddl Tetikleyicileri nesneler olarak saklanır ana veritabanı. Ancak, sorgulayarak sunucu kapsamı ddl Tetikleyiciler hakkında bilgi edinebilirsiniz sys.server_triggers katalog görünümünde herhangi bir veritabanı bağlamı.

Transact-sql deyimini veya deyimleri Grup belirtme

Seçme bir belirli ddl deyimi ddl tetikleyici ateşlenmesine

ddl Tetikleyiciler tasarlanan bir veya daha fazla belirli sonra yangın Transact-SQLdeyimleri çalıştırılır. Önceki örnek, tetikleyici safetysonra herhangi bir yangın DROP_TABLEya ALTER_TABLEolay. Listeleri için Transact-SQLdeyimleri ddl tetikleyici ateşlenmesine belirtilebilir ve kapsamı, tetikleyici yangın, bakın ddl olayları.

ddl tetikleyici ateşlenmesine ddl deyimlerinin önceden tanımlanmış bir grubu seçme

ddl tetikleyici yürütme sonrasında herhangi bir harekete Transact-SQLbenzer olayları önceden tanımlanmış bir gruba ait olay. Örneğin, eğer herhangi bir create table, alter table veya drop table deyimi çalıştırıldıktan sonra ateşlenmesine ddl tetikleyici, için ddl_table_events TETIKLEYICI create deyimi içinde belirtebilirsiniz. create TETIKLEYICI çalıştırıldıktan sonra bir olay grubu tarafından karşılanmaktadır olaylar eklenir sys.trigger_events Katalog görünümü.

İçinde SQL Server 2005, tetikleyici bir olay grubu oluşturduysanız sys.trigger_events olay grubu hakkında bilgi içermeyen sys.trigger_events sadece bu grup tarafından ele tek tek olayları hakkında bilgi içerir. İçinde SQL Server 2008ve daha sys.trigger_events meta veri Tetikleyiciler oluşturulan olay Grup ve hakkında da olay grubu kapsayan olaylar devam ederse. Bu nedenle olay grupları kapsamındaki olaylar değiştirir SQL Server 2008ve daha yüksek, bu olay grupları üzerinde oluşturulan ddl Tetikleyiciler uygulanmaz SQL Server 2005.

ddl Tetikleyicileri kullanılabilir ddl deyimlerinin önceden tanımlı gruplar listesi için bkz: olay grupları kapak ve hangi bu olay grupları programlanmış, kapsamlar belirli deyimleri ddl olay grupları.

ilişkili Görevler

Görev

Konu

Oluşturmak, değiştirmek, silmek veya ddl Tetikleyiciler devre dışı bırak açıklar.

ddl Tetikleyiciler uygulamak

clr ddl tetikleyici oluşturmak nasıl açıklar.

clr Tetikleyicileri oluşturma

ddl Tetikleyiciler hakkında bilgi dönmek açıklar.

dml Tetikleyiciler hakkında bilgi almak

eventdata işlevi kullanılarak ddl tetikleyici harekete olay hakkında bilgi dönmek açıklar.

eventdata işlevini kullanma

Tetikleyici güvenliği yönetmek nasıl açıklar.

Tetikleyici güvenliği yönetme

Ayrıca bkz.

Başvuru

CREATE TRIGGER (Transact-SQL)

Kavramlar

dml Tetikleyicileri

Oturum Açma Tetikleyicileri