Pemicu DML

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Pemicu DML adalah jenis prosedur tersimpan khusus yang secara otomatis berlaku ketika terjadi peristiwa bahasa manipulasi data (DML) yang memengaruhi tabel atau tampilan yang ditentukan dalam pemicu. Peristiwa DML termasuk pernyataan INSERT, UPDATE, atau DELETE. Pemicu DML dapat digunakan untuk menerapkan aturan bisnis dan integritas data, mengkueri tabel lain, dan menyertakan pernyataan Transact-SQL yang kompleks. Pemicu dan pernyataan yang menembakkannya diperlakukan sebagai satu transaksi, yang dapat digulung balik dari dalam pemicu. Jika kesalahan parah terdeteksi (misalnya, ruang disk tidak mencukup), seluruh transaksi secara otomatis kembali.

Manfaat Pemicu DML

Pemicu DML mirip dengan batasan karena dapat memberlakukan integritas entitas atau integritas domain. Secara umum, integritas entitas harus selalu diberlakukan pada tingkat terendah oleh indeks yang merupakan bagian dari batasan KUNCI PRIMER dan UNIK atau dibuat secara independen dari batasan. Integritas domain harus diberlakukan melalui batasan CHECK, dan integritas referensial (RI) harus diberlakukan melalui batasan KUNCI ASING. Pemicu DML paling berguna ketika fitur yang didukung oleh batasan tidak dapat memenuhi kebutuhan fungsi aplikasi.

Daftar berikut membandingkan pemicu DML dengan batasan dan identifikasi ketika pemicu DML memiliki manfaat atas batasan.

  • Pemicu DML dapat mengapit perubahan melalui tabel terkait dalam database; namun, perubahan ini dapat dijalankan dengan lebih efisien menggunakan batasan integritas referensial yang bertingkat. Batasan KUNCI ASING dapat memvalidasi nilai kolom hanya dengan kecocokan yang tepat dengan nilai di kolom lain, kecuali klausul REFERENCES menentukan tindakan referensial berjenjang.

  • Mereka dapat melindungi dari operasi INSERT, UPDATE, dan DELETE yang berbahaya atau salah dan memberlakukan pembatasan lain yang lebih kompleks daripada yang ditentukan dengan batasan CHECK.

    Tidak seperti batasan CHECK, pemicu DML dapat mereferensikan kolom di tabel lain. Misalnya, pemicu dapat menggunakan SELECT dari tabel lain untuk membandingkan dengan data yang disisipkan atau diperbarui dan untuk melakukan tindakan tambahan, seperti mengubah data atau menampilkan pesan kesalahan yang ditentukan pengguna.

  • Mereka dapat mengevaluasi status tabel sebelum dan sesudah modifikasi data dan mengambil tindakan berdasarkan perbedaan tersebut.

  • Beberapa pemicu DML dengan jenis yang sama (INSERT, UPDATE, atau DELETE) pada tabel memungkinkan beberapa tindakan berbeda untuk terjadi sebagai respons terhadap pernyataan modifikasi yang sama.

  • Batasan dapat berkomunikasi tentang kesalahan hanya melalui pesan kesalahan sistem standar. Jika aplikasi Anda memerlukan, atau dapat memperoleh manfaat dari, pesan yang disesuaikan dan penanganan kesalahan yang lebih kompleks, Anda harus menggunakan pemicu.

  • Pemicu DML dapat melarang atau mengembalikan perubahan yang melanggar integritas referensial, sehingga membatalkan modifikasi data yang dicoba. Pemicu seperti itu mungkin berlaku ketika Anda mengubah kunci asing dan nilai baru tidak cocok dengan kunci utamanya. Namun, batasan KUNCI ASING biasanya digunakan untuk tujuan ini.

  • Jika batasan ada pada tabel pemicu, batasan tersebut diperiksa setelah eksekusi pemicu ALIH-ALIH tetapi sebelum eksekusi pemicu AFTER. Jika batasan dilanggar, tindakan ALIH-ALIH pemicu digulung balik dan pemicu AFTER tidak dijalankan.

Jenis Pemicu DML

Setelah pemicu
Setelah pemicu dijalankan setelah tindakan pernyataan INSERT, UPDATE, MERGE, atau DELETE dilakukan. Pemicu SETELAH tidak pernah dijalankan jika pelanggaran batasan terjadi; oleh karena itu, pemicu ini tidak dapat digunakan untuk pemrosesan apa pun yang dapat mencegah pelanggaran batasan. Untuk setiap tindakan INSERT, UPDATE, atau DELETE yang ditentukan dalam pernyataan MERGE, pemicu yang sesuai diaktifkan untuk setiap operasi DML.

ALIH-ALIH pemicu
ALIH-ALIH pemicu mengambil alih tindakan standar dari pernyataan pemicu. Oleh karena itu, kolom dapat digunakan untuk melakukan pemeriksaan kesalahan atau nilai pada satu atau beberapa kolom dan melakukan tindakan tambahan sebelum menyisipkan, memperbarui, atau menghapus baris atau baris. Misalnya, ketika nilai yang diperbarui dalam kolom upah per jam dalam tabel penggajian melebihi nilai yang ditentukan, pemicu dapat didefinisikan untuk menghasilkan pesan kesalahan dan mengembalikan transaksi, atau menyisipkan rekaman baru ke dalam jejak audit sebelum memasukkan rekaman ke dalam tabel penggajian. Keuntungan utama dari ALIH-ALIH pemicu adalah bahwa mereka mengaktifkan tampilan yang tidak akan dapat diperbarui untuk mendukung pembaruan. Misalnya, tampilan berdasarkan beberapa tabel dasar harus menggunakan pemicu ALIH-ALIH untuk mendukung penyisipan, pembaruan, dan penghapusan data referensi tersebut dalam lebih dari satu tabel. Keuntungan lain dari ALIH-ALIH pemicu adalah mereka memungkinkan Anda untuk membuat kode logika yang dapat menolak bagian batch sambil membiarkan bagian lain dari batch berhasil.

Tabel ini membandingkan fungsionalitas pemicu AFTER dan ALIH-ALIH.

Fungsi Setelah pemicu ALIH-ALIH pemicu
Penerapan Tabel Tabel dan tampilan
Kuantitas per tabel atau tampilan Beberapa per tindakan pemicu (PERBARUI, HAPUS, dan SISIPKAN) Satu per tindakan pemicu (PERBARUI, HAPUS, dan SISIPKAN)
Referensi berskala Tidak ada batasan yang berlaku ALIH-ALIH PEMicu UPDATE dan DELETE tidak diizinkan pada tabel yang merupakan target batasan integritas referensial bertingkat.
Eksekusi Setelah:

Pemrosesan batasan

Tindakan referensial deklaratif

pembuatan tabel yang disisipkan dan dihapus

Tindakan pemicu
Sebelum: Pemrosesan batasan

Sebagai ganti: Tindakan pemicu

Setelah: pembuatan tabel yang disisipkan dan dihapus
Urutan eksekusi Eksekusi pertama dan terakhir dapat ditentukan Tidak berlaku
varchar(max), nvarchar(max), dan referensi kolom varbinary(max) dalam tabel yang disisipkan dan dihapus Diizinkan Diizinkan
referensi kolom teks, ntext, dan gambar dalam tabel yang disisipkandan dihapus Tidak diizinkan Diizinkan

Pemicu CLR
Pemicu CLR dapat berupa pemicu AFTER atau ALIH-ALIH. Pemicu CLR juga dapat menjadi pemicu 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.

Tugas Topik
Menjelaskan cara membuat pemicu DML. Membuat Pemicu DML
Menjelaskan cara membuat pemicu CLR. Membuat Pemicu CLR
Menjelaskan cara membuat pemicu DML untuk menangani modifikasi data baris tunggal dan multibaris. Membuat Pemicu DML untuk Menangani Beberapa Baris Data
Menjelaskan cara menumpuk pemicu. Membuat Pemicu Berlapis
Menjelaskan cara menentukan urutan pemicu AFTER diaktifkan. Tentukan Pemicu Pertama dan Terakhir
Menjelaskan cara menggunakan tabel khusus yang disisipkan dan dihapus dalam kode pemicu. Menggunakan Tabel yang disisipkan dan dihapus
Menjelaskan cara mengubah atau mengganti nama pemicu DML. Mengubah atau Mengganti Nama Pemicu DML
Menjelaskan cara melihat informasi tentang pemicu DML. Mendapatkan Informasi Tentang Pemicu DML
Menjelaskan cara menghapus atau menonaktifkan pemicu DML. Menghapus atau Menonaktifkan Pemicu DML
Menjelaskan cara mengelola keamanan pemicu. Mengelola Keamanan Pemicu

Lihat Juga

BUAT PEMICU (Transact-SQL)
UBAH PEMICU (Transact-SQL)
JATUHKAN PEMICU (Transact-SQL)
NONAKTIFKAN PEMICU (Transact-SQL)
Fungsi Pemicu (Transact-SQL)