Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Buat Pemicu DML di SQL Server

Di SQL Server, Anda dapat menggunakan CREATE TRIGGER pernyataan untuk membuat pemicu.

Pemicu adalah jenis khusus dari prosedur tersimpan yang secara otomatis berjalan ketika suatu peristiwa terjadi di server database.

Anda dapat membuat pemicu DML, pemicu DDL, atau pemicu masuk.

Artikel ini memberikan contoh pembuatan pemicu DML.

Apa itu Pemicu DML?

Pemicu DML adalah pemicu yang berjalan saat pengguna mencoba mengubah data melalui peristiwa bahasa manipulasi data (DML).

Acara DML termasuk INSERT , UPDATE , atau DELETE pernyataan. Pemicu DML dapat digunakan untuk menegakkan aturan bisnis dan integritas data, membuat kueri tabel lain, dan menyertakan pernyataan T-SQL yang kompleks.

Pemicu dan pernyataan yang mengaktifkannya diperlakukan sebagai satu transaksi, yang dapat dibatalkan dari dalam pemicu.

Contoh

Berikut adalah contoh untuk mendemonstrasikan cara kerja pemicu DML.

CREATE TABLE t1 (
    id int IDENTITY(1,1) NOT NULL,
    c1 int DEFAULT 0,
    c2 int DEFAULT 0,
    c3 int DEFAULT 0
);

CREATE TRIGGER trg_t1
ON t1
AFTER INSERT, UPDATE
AS
UPDATE t1
SET c3 = c3 + 1
WHERE id IN (SELECT DISTINCT id FROM inserted);

Dalam contoh ini saya membuat tabel dan saya juga membuat pemicu yang akan diaktifkan setiap kali baris dimasukkan atau diperbarui dalam tabel itu.

Dalam hal ini, pemicu menambahkan 1 ke c3 kolom setiap kali data dimasukkan atau diperbarui.

Saya memanggil pemicu trg_t1 . Saya mengikuti bagian itu dengan ON t1 , yang berarti pemicu akan dijalankan pada tabel bernama t1 .

Sebagai alternatif, Anda dapat menentukan tampilan untuk menjalankan pemicu, meskipun Anda hanya dapat mereferensikan tampilan dengan INSTEAD OF pemicu (dalam hal ini, ganti AFTER dengan INSTEAD OF ). Selain itu, Anda tidak dapat menentukan pemicu DML pada tabel sementara lokal atau global.

AFTER menetapkan bahwa pemicu DML diaktifkan hanya ketika semua operasi yang ditentukan dalam pernyataan SQL pemicu telah berhasil diluncurkan. Sebagai alternatif, Anda dapat menentukan FOR di sini.

Alternatif lain adalah menggunakan INSTEAD OF , yang akan menjalankan pemicu sebagai gantinya dari pernyataan SQL yang memicu. Oleh karena itu, ini mengesampingkan tindakan dari pernyataan pemicu.

Apa yang inserted Tabel?

Di pemicu saya, saya dapat mengetahui baris mana yang diperbarui dengan menanyakan inserted tabel.

SQL Server membuat dan mengelola tabel yang disebut inserted , yang merupakan tabel residen memori sementara yang menyimpan salinan baris yang terpengaruh selama INSERT dan UPDATE pernyataan. Selama transaksi penyisipan atau pembaruan, baris baru ditambahkan ke inserted meja dan meja pemicu. Baris dalam tabel yang disisipkan adalah salinan dari baris baru di tabel pemicu.

SQL Server juga membuat dan memelihara tabel serupa yang disebut terhapus, yang menyimpan salinan dari baris yang terpengaruh selama DELETE dan UPDATE pernyataan. Selama eksekusi DELETE atau UPDATE pernyataan, baris dihapus dari tabel pemicu dan ditransfer ke tabel yang dihapus.

Jalankan Pemicunya

Sekarang tabel dan pemicunya telah dibuat, mari jalankan beberapa pernyataan SQL yang akan memicunya.

INSERT INTO t1 (c1) 
VALUES (1);

SELECT * FROM t1;

Hasil:

+------+------+------+------+
| id   | c1   | c2   | c3   |
|------+------+------+------|
| 1    | 1    | 0    | 1    |
+------+------+------+------+

Jadi kita bisa melihat bahwa pemicunya bekerja seperti yang diharapkan. Saat saya menyisipkan baris, saya hanya menetapkan nilai untuk c1 kolom, tetapi pemicu memastikan bahwa c3 kolom juga diperbarui.

Perhatikan bahwa nilai default untuk semua kolom adalah 0 (seperti yang ditentukan saat saya membuat tabel), dan pemicu menambahkan 1 ke dalamnya.

Ayo lakukan UPDATE operasi pada kolom yang sama.

UPDATE t1 
SET c1 = c1 + 1
WHERE id = 1;

SELECT * FROM t1;

Hasil:

+------+------+------+------+
| id   | c1   | c2   | c3   |
|------+------+------+------|
| 1    | 2    | 0    | 2    |
+------+------+------+------+

Sekali lagi, c3 kolom juga diperbarui oleh pemicu.

Sekarang mari kita perbarui c2 kolom.

UPDATE t1 
SET c2 = c2 + 1
WHERE id = 1;

SELECT * FROM t1;

Hasil:

+------+------+------+------+
| id   | c1   | c2   | c3   |
|------+------+------+------|
| 1    | 2    | 1    | 3    |
+------+------+------+------+

Jadi sekali lagi, c3 kolom diperbarui oleh pemicu.

Pemicu khusus ini diaktifkan setiap kali kolom lain di baris yang sama diperbarui.

Anda juga dapat menggunakan IF UPDATE(column_name) untuk memeriksa pembaruan ke satu kolom, atau COLUMNS_UPDATED() untuk memeriksa pembaruan di beberapa kolom.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:Pilih kolom dengan nilai NULL saja

  2. Cara menyisipkan baris di Tabel SQL Server dengan Mengedit Baris Tabel GUI - Tutorial SQL Server / TSQL Bagian 101

  3. Log Transaksi SQL Server, Bagian 3:Dasar-dasar Pencatatan

  4. Cuplikan Basis Data SQL Server -2

  5. SQL Server Internal:Operator Bermasalah Pt. II – Hashing