Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Database 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 KEYbatasan dapat memvalidasi nilai kolom hanya dengan kecocokan persis dengan nilai di kolom lain, kecualiREFERENCESklausul menentukan tindakan referensial berjenjang.Mereka dapat melindungi dari operasi berbahaya atau salah pada
INSERT,UPDATE, danDELETE, serta memberlakukan pembatasan lain yang lebih kompleks daripada pembatasan yang ditentukan dengan batasanCHECK.Tidak seperti
CHECKbatasan, pemicu DML dapat mereferensikan kolom di tabel lain. Misalnya, pemicu dapat menggunakanSELECTdari 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, atauDELETE) 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 KEYbatasan biasanya digunakan untuk tujuan ini.Jika batasan ada pada tabel pemicu, batasan akan diperiksa setelah
INSTEAD OFeksekusi pemicu tetapi sebelumAFTEReksekusi pemicu. Jika batasan dilanggar,INSTEAD OFaksi pemicu dibatalkan danAFTERpemicu 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 tabelTindakan 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 terkait
| 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 |