Pemicu DDL

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

DDL memicu kebakaran sebagai respons terhadap berbagai peristiwa Data Definition Language (DDL). Peristiwa ini terutama sesuai dengan pernyataan Transact-SQL yang dimulai dengan kata kunci CREATE, ALTER, DROP, GRANT, DENY, REVOKE, atau UPDATE STATISTICS. Prosedur tersimpan sistem tertentu yang melakukan operasi seperti DDL juga dapat mengaktifkan pemicu DDL.

Gunakan pemicu DDL saat Anda ingin melakukan hal berikut:

  • Mencegah perubahan tertentu pada skema database Anda.

  • Terjadi sesuatu dalam database sebagai respons terhadap perubahan dalam skema database Anda.

  • Rekam perubahan atau peristiwa dalam skema database.

Penting

Uji pemicu DDL Anda untuk menentukan responsnya terhadap prosedur tersimpan sistem yang dijalankan. Misalnya, pernyataan CREATE TYPE dan prosedur tersimpan sp_addtype akan mengaktifkan pemicu DDL yang dibuat pada peristiwa CREATE_TYPE.

Jenis Pemicu DDL

Pemicu DDL T-SQL

Jenis khusus prosedur tersimpan Transact-SQL yang menjalankan satu atau beberapa pernyataan Transact-SQL sebagai respons terhadap peristiwa cakupan server atau cakupan database. Misalnya, Pemicu DDL dapat diaktifkan jika pernyataan seperti ALTER SERVER CONFIGURATION dijalankan atau jika tabel dihapus dengan menggunakan DROP TABLE.

Pemicu CLR DDL

Alih-alih menjalankan prosedur tersimpan Transact-SQL, pemicu CLR menjalankan satu atau beberapa metode yang ditulis dalam kode terkelola yang merupakan anggota rakitan yang dibuat di .NET Framework dan diunggah di SQL Server.

Pemicu DDL diaktifkan hanya setelah pernyataan DDL yang memicunya dijalankan. Pemicu DDL tidak dapat digunakan sebagai ALIH-ALIH pemicu. Pemicu DDL tidak diaktifkan sebagai respons terhadap peristiwa yang memengaruhi tabel sementara lokal atau global dan prosedur tersimpan.

Pemicu DDL tidak membuat tabel khusus yang disisipkan dan dihapus .

Informasi tentang peristiwa yang mengaktifkan pemicu DDL, dan perubahan berikutnya yang disebabkan oleh pemicu, ditangkap dengan menggunakan fungsi EVENTDATA.

Beberapa pemicu yang akan dibuat untuk setiap peristiwa DDL.

Tidak seperti pemicu DML, pemicu DDL tidak terlingkup ke skema. Oleh karena itu, fungsi seperti OBJECT_ID, OBJECT_NAME, OBJECTPROPERTY, dan OBJECTPROPERTYEX tidak dapat digunakan untuk mengkueri metadata tentang pemicu DDL. Gunakan tampilan katalog sebagai gantinya.

Pemicu DDL cakupan server muncul di SQL Server Management Studio Object Explorer di folder Pemicu . Folder ini terletak di bawah folder Objek Server. Pemicu DDL cakupan database muncul di folder Pemicu Database. Folder ini terletak di bawah folder Programmability dari database yang sesuai.

Penting

Kode berbahaya di dalam pemicu dapat berjalan di bawah hak istimewa yang disempurnakan. Untuk informasi selengkapnya tentang cara membantu mengurangi ancaman ini, lihat Mengelola Keamanan Pemicu.

Cakupan Pemicu DDL

Pemicu DDL dapat diaktifkan sebagai respons terhadap peristiwa Transact-SQL yang diproses dalam database saat ini, atau di server saat ini. Cakupan pemicu tergantung pada peristiwa. Misalnya, pemicu DDL yang dibuat untuk diaktifkan sebagai respons terhadap peristiwa CREATE_TABLE dapat melakukannya setiap kali peristiwa CREATE_TABLE terjadi di database, atau pada instans server. Pemicu DDL yang dibuat untuk diaktifkan sebagai respons terhadap peristiwa CREATE_LOGIN dapat melakukannya hanya ketika peristiwa CREATE_LOGIN terjadi di instans server.

Dalam contoh berikut, pemicu safety DDL akan diaktifkan setiap kali peristiwa DROP_TABLE atau ALTER_TABLE terjadi dalam database.

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

Dalam contoh berikut, pemicu DDL mencetak pesan jika ada CREATE_DATABASE peristiwa yang terjadi pada instans server saat ini. Contoh menggunakan EVENTDATA fungsi untuk mengambil teks pernyataan Transact-SQL yang sesuai. Untuk informasi selengkapnya tentang cara menggunakan EVENTDATA dengan pemicu DDL, lihat Menggunakan Fungsi EVENTDATA.

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  
  

Daftar yang memetakan pernyataan T-SQL ke cakupan yang dapat ditentukan untuk pernyataan tersebut tersedia melalui tautan yang disediakan di bagian "Memilih Pernyataan DDL Tertentu untuk Mengaktifkan Pemicu DDL," nanti dalam topik ini.

Pemicu DDL yang dilingkup database disimpan sebagai objek dalam database tempat pemicu tersebut dibuat. Pemicu DDL dapat dibuat dalam database master dan berulah seperti yang dibuat dalam database yang dirancang pengguna. Anda bisa mendapatkan informasi tentang pemicu DDL dengan mengkueri tampilan katalog sys.triggers . Anda dapat mengkueri sys.triggers dalam konteks database tempat pemicu dibuat atau dengan menentukan nama database sebagai pengidentifikasi, seperti master.sys.triggers.

Pemicu DDL cakupan server disimpan sebagai objek dalam database master . Namun, Anda bisa mendapatkan informasi tentang pemicu DDL cakupan server dengan mengkueri tampilan katalog sys.server_triggers dalam konteks database apa pun.

Menentukan Pernyataan Transact-SQL atau Grup Pernyataan

Memilih Pernyataan DDL Tertentu untuk Mengaktifkan Pemicu DDL

Pemicu DDL dapat dirancang untuk diaktifkan setelah satu atau beberapa pernyataan Transact-SQL tertentu dijalankan. Dalam contoh sebelumnya, pemicu safety diaktifkan setelah peristiwa atau ALTER_TABLE apa punDROP_TABLE. Untuk daftar pernyataan Transact-SQL yang dapat ditentukan untuk mengaktifkan pemicu DDL, dan cakupan di mana pemicu dapat diaktifkan, lihat Peristiwa DDL.

Memilih Grup Pernyataan DDL yang Telah Ditentukan sebelumnya untuk Mengaktifkan Pemicu DDL

Pemicu DDL dapat diaktifkan setelah eksekusi peristiwa Transact-SQL apa pun yang termasuk dalam pengelompokan peristiwa serupa yang telah ditentukan sebelumnya. Misalnya, jika Anda ingin pemicu DDL diaktifkan setelah pernyataan CREATE TABLE, ALTER TABLE, atau DROP TABLE dijalankan, Anda dapat menentukan FOR DDL_TABLE_EVENTS dalam pernyataan CREATE TRIGGER. Setelah CREATE TRIGGER dijalankan, peristiwa yang dicakup oleh grup peristiwa ditambahkan ke tampilan katalog sys.trigger_events .

Di SQL Server 2005 (9.x), jika pemicu dibuat pada grup peristiwa, sys.trigger_events tidak menyertakan informasi tentang grup peristiwa, sys.trigger_events menyertakan informasi hanya tentang peristiwa individual yang dicakup oleh grup tersebut. Di SQL Server 2008 (10.0.x) dan yang lebih tinggi, sys.trigger_events mempertahankan metadata tentang grup peristiwa tempat pemicu dibuat, dan juga tentang peristiwa individual yang dicakup grup peristiwa. Oleh karena itu, perubahan pada peristiwa yang dicakup oleh grup peristiwa di SQL Server 2008 (10.0.x) dan yang lebih tinggi tidak berlaku untuk pemicu DDL yang dibuat pada grup peristiwa tersebut di SQL Server 2005 (9.x).

Untuk daftar grup pernyataan DDL yang telah ditentukan sebelumnya yang tersedia untuk pemicu DDL, pernyataan tertentu yang dicakup grup peristiwa, dan cakupan di mana grup peristiwa ini dapat diprogram, lihat Grup Peristiwa DDL.

Tugas Topik
Menjelaskan cara membuat, memodifikasi, menghapus, atau menonaktifkan pemicu DDL. Menerapkan Pemicu DDL
Menjelaskan cara membuat pemicu CLR DDL. Membuat Pemicu CLR
Menjelaskan cara mengembalikan informasi tentang pemicu DDL. Mendapatkan Informasi Tentang Pemicu DDL
Menjelaskan cara mengembalikan informasi tentang peristiwa yang mengaktifkan pemicu DDL dengan menggunakan fungsi EVENTDATA. Menggunakan Fungsi EVENTDATA
Menjelaskan cara mengelola keamanan pemicu. Mengelola Keamanan Pemicu

Lihat Juga

Pemicu DML
Pemicu Masuk
BUAT PEMICU (Transact-SQL)
EVENTDATA (Transact-SQL)