Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
DDL tetikleyicileri çeşitli Veri Tanımı Dili (DDL) olaylarına yanıt olarak ateşlenir. Bu olaylar öncelikli olarak CREATE, ALTER, DROP, GRANT, DENY, REVOKE veya UPDATE STATISTICS anahtar sözcükleriyle başlayan Transact-SQL deyimlerine karşılık gelir. DDL benzeri işlemler gerçekleştiren bazı sistem saklı yordamları da DDL tetikleyicilerini tetikleyebilir.
Aşağıdaki görevleri gerçekleştirmek istediğinizde DDL tetikleyicilerini kullanın:
- Veritabanı şemanızda bazı değişiklikleri engelleyin.
- Veritabanı şemanızdaki bir değişikliğe yanıt olarak veritabanında bir şey olmasını sağlayın.
- Değişiklikleri veya olayları veritabanı şemasına kaydedin.
Önemli
Çalıştırılan sistem saklı yordamlarına yanıtlarını belirlemek için DDL tetikleyicilerinizi test edin. Örneğin, CREATE TYPE ifadesi ve sp_addtype saklı yordam, bir CREATE_TYPE olayında oluşturulan bir DDL tetikleyicisini tetikler.
DDL tetikleyicisi türleri
Transact-SQL tetikleyici
Sunucu kapsamlı veya veritabanı kapsamlı bir olaya yanıt olarak bir veya daha fazla Transact-SQL deyimi yürüten özel bir Transact-SQL saklı yordam türü. Örneğin, ALTER SERVER CONFIGURATION gibi bir deyim yürütüldüğünde veya DROP TABLE kullanılarak bir tablo silindiğinde bir DDL tetikleyicisi tetiklenebilir.
CLR tetikleyicisi
Transact-SQL saklı yordamı yürütmek yerine ortak dil çalışma zamanı (CLR) tetikleyicisi, .NET Framework'te oluşturulan ve SQL Server'a yüklenen bir derlemenin üyesi olan yönetilen kodda yazılmış bir veya daha fazla yöntemi yürütür.
DDL tetikleyicileri yalnızca onları tetikleyen DDL deyimleri çalıştırıldıktan sonra tetiklenir. DDL tetikleyicileri INSTEAD OF olarak kullanılamaz. DDL tetikleyicileri, yerel veya genel geçici tabloları ve saklı yordamları etkileyen olaylara yanıt olarak tetiklemez.
DDL tetikleyicileri özel inserted ve deleted tabloları oluşturmaz.
Bir DDL tetikleyicisini tetikleyen bir olay hakkındaki bilgiler ve tetikleyicinin neden olduğu sonraki değişiklikler, EVENTDATA işlevi kullanılarak yakalanır.
Her bir DDL olayı için birden çok tetikleyici oluşturulacak.
Veri İşleme Dili (DML) tetikleyicilerinden farklı olarak, DDL tetikleyicilerinin kapsamı şemalar olarak kapsamlanmamıştır. Bu nedenle, DDL tetikleyicileri hakkındaki meta verileri sorgulamak için , OBJECT_ID, OBJECT_NAMEve OBJECTPROPERTY gibi OBJECTPROPERTYEXişlevler kullanılamaz. Bunun yerine katalog görünümlerini kullanın.
Sunucu kapsamlı DDL tetikleyicileri , Tetikleyiciler klasöründeki SQL Server Management Studio Nesne Gezgini'nde görünür. Bu klasör , Sunucu Nesneleri klasörünün altında bulunur. Veritabanı kapsamlı DDL tetikleyicileri , Veritabanı Tetikleyicileri klasöründe görünür. Bu klasör, ilgili veritabanının Programlanabilirlik klasörünün altında bulunur.
Önemli
Tetikleyicilerin içindeki kötü amaçlı kod, yükseltilmiş ayrıcalıklar altında çalıştırılabilir. Bu tehdidi azaltmaya yardımcı olmak için bkz. Tetikleyici güvenliğini yönetme.
DDL tetikleyici kapsamı
DDL tetikleyicileri geçerli veritabanında veya geçerli sunucuda işlenen bir Transact-SQL olayına yanıt olarak tetiklenebilir. Tetikleyicinin kapsamı olaya bağlıdır. Örneğin, bir olaya yanıt olarak tetiklenmek üzere oluşturulan bir CREATE_TABLE DDL tetikleyicisi, veritabanında veya sunucu örneğinde bir CREATE_TABLE olay gerçekleştiğinde bunu yapabilir. Bir olaya yanıt olarak tetiklenmek üzere oluşturulan bir CREATE_LOGIN DDL tetikleyicisi bunu yalnızca sunucu örneğinde bir CREATE_LOGIN olay gerçekleştiğinde yapabilir.
Aşağıdaki örnekte, veritabanında bir safety veya DROP_TABLE olay gerçekleştiğinde DDL tetikleyicisi ALTER_TABLE tetikler.
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, geçerli sunucu örneğinde herhangi CREATE_DATABASE bir olay oluşursa bir DDL tetikleyicisi bir ileti yazdırır. Örnek, EVENTDATA fonksiyonunu, karşılık gelen Transact-SQL deyiminin metnini almak için kullanır. DDL tetikleyicileriyle kullanma EVENTDATA hakkında daha fazla bilgi için bkz. EVENTDATA İş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;
Transact-SQL deyimlerini bunlar için belirtilebilecek kapsamlarla eşleyen listeler, bu makalenin devamında bir DDL tetikleyicisi tetiklenecek belirli bir DDL deyimini seçme bölümünde sağlanan bağlantılar aracılığıyla kullanılabilir.
Veritabanı kapsamlı DDL tetikleyicileri, oluşturuldukları veritabanında nesneler olarak depolanır. DDL tetikleyicileri veritabanında oluşturulabilir ve kullanıcı tarafından tasarlanan master veritabanlarında oluşturulanlar gibi davranabilir. Katalog görünümünü sorgulayarak sys.triggers DDL tetikleyicileri hakkında bilgi edinebilirsiniz. Tetikleyicilerin oluşturulduğu veritabanı bağlamında veya veritabanı adını gibi sys.triggersbir tanımlayıcı olarak belirterek sorgulayabilirsinizmaster.sys.triggers.
Sunucu kapsamlı DDL tetikleyicileri, veritabanı master nesneleri olarak depolanır. Ancak, herhangi bir veritabanı bağlamında katalog görünümünü sorgulayarak sys.server_triggers sunucu kapsamlı DDL tetikleyicileri hakkında bilgi edinebilirsiniz.
Transact-SQL deyimi veya deyim grubu belirt
Belirli bir DDL ifadesini seçerek bir DDL tetikleyicisini çalıştırın
DDL tetikleyicileri, bir veya daha fazla belirli Transact-SQL deyimi çalıştırıldıktan sonra tetiklenecek şekilde tasarlanabilir. Önceki örnekte, tetikleyici safety herhangi bir DROP_TABLE veya ALTER_TABLE olaydan sonra tetikler. DDL tetikleyicisi tetiklenecek şekilde belirtilebilen Transact-SQL deyimlerinin listeleri ve tetikleyicinin tetiklenebileceği kapsam için bkz. DDL Olayları.
Önceden tanımlanmış bir DDL ifade grubunu seçerek bir DDL tetikleyicisini tetiklemek
DDL tetikleyicisi, benzer olayların önceden tanımlanmış bir grubuna ait olan herhangi bir Transact-SQL olayı yürütüldükten sonra tetiklenebilir. Örneğin, bir DDL tetikleyicisinin, herhangi bir CREATE TABLE , ALTER TABLE veya DROP TABLE deyimi çalıştırıldıktan sonra tetiklenmesini istiyorsanız, FOR DDL_TABLE_EVENTS belirtin CREATE TRIGGER deyiminde. Çalıştırıldıktan sonra CREATE TRIGGER , bir olay grubunun kapsadığı olaylar katalog görünümüne sys.trigger_events eklenir.
SQL Server 2005'te (9.x), bir olay grubunda tetikleyici oluşturulduysa, sys.trigger_events olay grubu hakkındaki bilgileri içermez, sys.trigger_events yalnızca söz konusu grubun kapsadığı tek tek olaylarla ilgili bilgileri içerir.
sys.trigger_events tetikleyicinin oluşturulduğu olay grubu ve ayrıca olay grubunun kapsadığı tek tek olaylar hakkındaki meta verileri kalıcı hale getiren. Bu nedenle, olay gruplarının kapsadığı olaylarda yapılan değişiklikler, SQL Server 2005'teki (9.x) bu olay gruplarında oluşturulan son SQL Server sürümlerindeki DDL tetikleyicileri için geçerli değildir.
DDL tetikleyicileri için kullanılabilen önceden tanımlanmış DDL deyim gruplarının listesi, olay gruplarının kapsadığı belirli deyimler ve bu olay gruplarının programlanabileceği kapsamlar için bkz. DDL Olay Grupları.
İlgili görevler
| Görev | Makale |
|---|---|
| DDL tetikleyicilerinin nasıl oluşturulacağını, değiştirileceği, silineceğini veya devre dışı bırakıldığını açıklar. | DDL Tetikleyicileri Uygulama |
| CLR DDL tetikleyicisinin nasıl oluşturulacağını açıklar. | CLR tetikleyicileri oluşturma |
| DDL tetikleyicileriyle ilgili bilgilerin nasıl döndürüleceğini açıklar. | DDL Tetikleyicileri Hakkında Bilgi Alma |
EVENTDATA işlevini kullanarak tetiklenen bir DDL tetikleyici olayı hakkında bilgileri nasıl döndüreceğinizi açıklar. |
EVENTDATA İşlevini kullanma |
| Tetikleyici güvenliğinin nasıl yönetileceğini açıklar. | Tetikleyici güvenliğini yönetme |
İlgili içerik
- DML Tetikleyicileri
- Oturum açma tetikleyicileri
- TETİKLEYİCİ OLUŞTUR (Transact-SQL)
- OLAY VERILERI (Transact-SQL)