Bagikan melalui


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, DROPGRANT, 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 tugas 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 sp_addtype yang tersimpan, keduanya mengaktifkan pemicu DDL yang dibuat pada acara CREATE_TYPE.

Jenis pemicu DDL

Transact-SQL pemicu

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 mungkin diaktifkan jika pernyataan seperti ALTER SERVER CONFIGURATION dijalankan atau jika tabel dihapus dengan menggunakan DROP TABLE.

Pemicu CLR

Alih-alih menjalankan prosedur tersimpan Transact-SQL, pemicu runtime bahasa umum (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 pemicu INSTEAD OF. Pemicu DDL tidak diaktifkan sebagai respons terhadap peristiwa yang memengaruhi tabel sementara lokal atau global dan prosedur tersimpan.

Pemicu DDL tidak membuat tabel khusus inserted dan deleted.

Informasi tentang peristiwa yang memicu 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 Data Manipulation Language (DML), pemicu DDL tidak dibatasi oleh 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 CREATE_TABLE peristiwa dapat melakukannya setiap kali CREATE_TABLE peristiwa terjadi dalam database, atau pada instans server. Pemicu DDL yang dibuat untuk diaktifkan sebagai respons terhadap peristiwa CREATE_LOGIN hanya akan terpicu ketika peristiwa CREATE_LOGIN terjadi di instans server.

Dalam contoh berikut, pemicu safety DDL 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;

Daftar yang memetakan pernyataan Transact-SQL ke cakupan yang dapat ditentukan untuknya tersedia melalui tautan yang disediakan di bagian Pilih pernyataan DDL tertentu untuk mengaktifkan pemicu DDL nanti di artikel ini.

Pemicu DDL dalam cakupan database disimpan sebagai objek di dalam database tempat pemicu tersebut dibuat. Pemicu DDL dapat dibuat dalam master basis data dan berfungsi seperti yang dibuat dalam basis data yang dirancang oleh pengguna. Anda bisa mendapatkan informasi tentang pemicu DDL dengan melakukan kueri pada sys.triggers tampilan katalog. Anda bisa 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 master database. Namun, Anda dapat memperoleh informasi tentang pemicu DDL berskala server dengan melakukan kueri pada tampilan katalog sys.server_triggers di dalam konteks database apa pun.

Tentukan pernyataan Transact-SQL atau grup pernyataan

Pilih 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 DROP_TABLE apa punALTER_TABLE. Untuk daftar pernyataan Transact-SQL yang dapat ditentukan untuk mengaktifkan pemicu DDL, dan cakupan di mana pemicu dapat diaktifkan, lihat Peristiwa DDL.

Pilih 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 dipicu 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 sys.trigger_events tampilan katalog.

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. 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 tidak berlaku untuk pemicu DDL dalam versi terbaru SQL Server 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 Artikel
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 EVENTDATA fungsi . Menggunakan Fungsi EVENTDATA
Menjelaskan cara mengelola keamanan pemicu. Mengelola keamanan pemicu