Bagikan melalui


Pemicu DML

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceDatabase SQL di Microsoft Fabric

Pemicu DML adalah jenis khusus prosedur tersimpan yang secara otomatis berlaku ketika terjadi peristiwa bahasa manipulasi data (DML) yang memengaruhi tabel atau tampilan yang ditentukan dalam pemicu. Peristiwa DML mencakup INSERT, UPDATE, atau DELETE perintah. 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.

Keuntungan

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 PRIMARY KEY dan UNIQUE sebagai batasan atau dibuat secara independen dari batasan. Integritas domain harus diberlakukan melalui CHECK batasan, dan integritas referensial (RI) harus diberlakukan melalui FOREIGN KEY batasan. 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. FOREIGN KEY batasan dapat memvalidasi nilai kolom hanya dengan kecocokan persis dengan nilai di kolom lain, kecuali REFERENCES klausul menentukan tindakan referensial berjenjang.

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

    Tidak seperti CHECK batasan, 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 lain, 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 dilakukan 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, FOREIGN KEY batasan biasanya digunakan untuk tujuan ini.

  • Jika batasan ada pada tabel pemicu, batasan akan diperiksa setelah INSTEAD OF eksekusi pemicu tetapi sebelum AFTER eksekusi pemicu. Jika batasan dilanggar, INSTEAD OF aksi pemicu dibatalkan dan AFTER pemicu tidak dieksekusi.

Jenis pemicu DML

Setelah pemicu

AFTERpemicu dijalankan setelah tindakan INSERT, UPDATE, MERGE, atau DELETE perintah dilakukan. AFTER pemicu 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

INSTEAD OF pemicu mengambil alih tindakan standar dari pernyataan pemicu. Oleh karena itu, mereka dapat digunakan untuk melakukan pemeriksaan kesalahan atau nilai pada satu atau beberapa kolom, dan melakukan tindakan lain 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 pemicu INSTEAD OF adalah mereka mengaktifkan tampilan yang tidak akan dapat diperbarui untuk mendukung pembaruan. Misalnya, tampilan berdasarkan beberapa tabel dasar harus menggunakan INSTEAD OF pemicu untuk mendukung penyisipan, pembaruan, dan penghapusan data referensi tersebut di lebih dari satu tabel. Keuntungan lain dari INSTEAD OF 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 AFTER pemicu dan INSTEAD OF .

Fungsi AFTER pemicu INSTEAD OF pemicu
Penerapan Tabel Tabel dan tampilan
Kuantitas per tabel atau tampilan Beberapa untuk setiap aksi pemicu (UPDATE, DELETE, dan INSERT) Satu per tindakan pemicu (UPDATE, DELETE, dan INSERT)
Referensi berskala Tidak ada batasan yang berlaku INSTEAD OF UPDATE dan DELETE pemicu tidak diizinkan pada tabel yang menjadi target batasan integritas referensial berjenjang.
Eksekusi Setelah:

Pemrosesan batasan

Tindakan referensial deklaratif

inserted dan deleted pembuatan tabel

Tindakan pemicu
Sebelum: Pemrosesan batasan

Sebagai ganti: Tindakan pemicu

Setelah pembuatan tabel inserted dan deleted
Urutan eksekusi Eksekusi pertama dan terakhir mungkin ditentukan Tidak berlaku
varchar(max), nvarchar(max), dan varbinary(max) referensi kolom dalam inserted dan deleted tabel Diizinkan Diizinkan
referensi kolom teks, ntext, dan gambar dalam tabel inserted dan deleted Tidak diizinkan Diizinkan

Pemicu CLR

Pemicu runtime bahasa umum (CLR) dapat berupa AFTER pemicu atau INSTEAD OF pemicu. Pemicu CLR juga dapat menjadi pemicu Data Definition Language (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 Artikel
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 di mana AFTER pemicu 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