ddl Tetikleyicileri tasarlama

DDL tetikleyicisi tasarlayabilirsiniz önce aşağıdakiler gereklidir:

  • DDL tetikleyicisi kapsam anlamanız gerekir.

  • Hangi belirleme Transact-SQL deyim, ya da Grup ifadeler, harekete tetikleyici.

Güvenlik notuGüvenlik Notu

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

Not

ddl tetikleyiciler, yerel veya genel geçici tablolar ve saklı yordamlar etkileyen olaylarına yanıt olarak ateşlenmesine.

Tetikleyici kapsam anlama

ddl Tetikleyiciler yanıt olarak ateşlenmesine bir Transact-SQL olay işlenen geçerli veritabanında veya geçerli bir sunucu.kapsam Tetikleyici olay üzerinde bağlıdır.Örneğin, her veritabanı veya sunucu örnek üzerinde create_table olay gerçekleştiğinde create_table olayına yanıt olarak baþlatmak için oluşturulan DDL tetikleyicisi bunu yapabilirsiniz.Yalnızca bir CREATE_LOGIN olay sunucu ortaya çıktığında oluşturulan bir CREATE_LOGIN olayına yanıt olarak baþlatmak için DDL tetikleyicisi yapabilirsiniz.

Aşağıdaki örnekte, DDL tetikleyicisi safety her harekete bir DROP_TABLE veya ALTER_TABLE olay ortaya veritabanı.

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 örnekte, herhangi DDL tetikleyicisi bir ileti yazdırır CREATE_DATABASE olay gerçekleşir, geçerli sunucu örnek.Bu örnek kullanır EVENTDATA buna karşılık gelen metin almak için işlev Transact-SQL deyim.İle ddl Tetikleyicileri eventdata 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

Eşleştirmek listeleri Transact-SQL "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 ifadeleri için bunları belirtilebilir kapsamları için kullanılabilir Bu konuda daha sonra.

Veritabanı kapsamlı ddl Tetikleyicileri içinde oluşturuldukları veritabanı nesneleri olarak depolanır.ddl Tetikleyicileri de oluşturulabilir ana veritabanı ve aynı kullanıcı tarafından tasarlanan veritabanlarında oluşturulanlar gibi davranır.ddl tetikleyiciler hakkında bilgi sorgulama yaparak elde trigger Katalog görünümü.Sorgulama yapabilirsiniz trigger tetikleyici oluşturulduğu veya veritabanı adı gibi bir tanımlayıcı belirterek veritabanı bağlamı içinde master.sys.triggers.

Sunucu kapsamlı ddl tetikleyici nesneleri olarak depolanan ana veritabanı.Ancak, sunucu kapsamlı ddl tetikleyiciler hakkında bilgi sorgulama yaparak elde edebilirsiniz sys.server_triggers Katalog görünümü veritabanı bağlamda.

ddl Tetikleyiciler için meta veriler almak hakkında daha fazla bilgi için bkz: ddl tetikleyiciler hakkında bilgi alma.

Transact-sql deyimini veya deyimlerini grubu belirtme

İçin yanıt bir veya daha fazla belirli ddl deyimleri veya önceden tanımlanmış bir ddl deyimleri Grup ateşlenmesine ddl Tetikleyiciler oluşturulabilir.

Seçme bir belirli ddl deyimi bir ddl tetikleyici harekete

ddl Tetikleyiciler tasarlanan bir veya daha fazla belirli sonra baþlatmak için Transact-SQL deyimleridir Çalıştır.Önceki örnekte, harekete safety geçirilir sonra herhangi DROP_TABLE veya ALTER_TABLE olay.Listeleri için Transact-SQL bir DDL tetikleyicisi ateşlenmesine için belirtilen ifadeleri ve kapsam , tetikleyici harekete, bkz: ddl olayları.

ddl deyimleri ddl tetikleyici ateşlenmesine için önceden tanımlanmış bir grup seçme

Yürütme sonrasında herhangi DDL tetikleyicisi tetikleyebilir Transact-SQL olay, ait olduğu için önceden tanımlanmış gruplandırma benzer olaylar.Örneğin, DDL tetikleyicisi ateşlenmesine create table, alter table ve drop table deyim çalıştırıldıktan sonra isterseniz, ddl_table_events için create TRIGGER deyim belirtebilirsiniz.create TRIGGER çalıştırdıktan sonra bir olay grubu tarafından kapsanan olaylar eklenir sys.trigger_events Katalog görünümü.

Not

De SQL Server 2005, tetikleyici bir olay grubu oluşturulduğunda, sys.trigger_events olay grubu hakkında bilgi içermez sys.trigger_events sadece o grubu tarafından ele tek tek olayları hakkında bilgi içerir.De SQL Server 2008, sys.trigger_events meta veriler Tetikleyiciler oluşturulan olay Grup ve hakkında da olay grubu kapsayan olaylar devam ederse.Bu nedenle olay grupları kapsamındaki olayların değiştirir SQL Server 2008 Bu olay grupları üzerinde oluşturulan ddl Tetikleyiciler uygulamak SQL Server 2005.

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