Trigger adalah salah satu Transact-SQL code yang intinya secara otomatis mengeksekusi suatu task (insert, update dan delete) pada suatu object apabila ada DML(Data Manipulation language) yang dieksekusi pada object tertentu.....
supaya lebih mudah kita asumsikan ada 2 tabel yaitu table stock dan table transaksi penjualan. pada tabel stok terdapat nama barang dan stoknya. kemudian terjadi penjualan barang pada table transaksi penjualan , maka secara otomatis jumlah stock barang pada table barang akan berkurang.
untuk lebih mudah , mari kita coba untuk membahas bagaimana cara membuat trigger.
sebelumnya kita create dulu Database dan beberapa tabel untuk uji coba trigger
(!) note : Pembuatan database yang akan kita gunakan disini semata-mata untuk mempermudah dalam memahami
Querynya :
Databasenya
CREATE DATABASE TOKO_PINTAR
Tabelnya
CREATE DATABASE TOKO_PINTAR USE TOKO_PINTAR GO CREATE TABLE Product ( kode_product INT Identity (20110,1), nama_barang Varchar(100), stok int ) CREATE TABLE Pembelian ( kode_pembelian INT Identity (11020,1), nama_barang VARCHAR (100), kode_product INT, jumlah INT ) CREATE TABLE Penjualan ( kode_penjualan INT Identity (11020400,1), nama_barang VARCHAR (100), kode_product INT, jumlah INT )
USE TOKO_PINTAR
GO
INSERT INTO Product VALUES ('Flashdisk 16 GB','20'),
('Processor Quad Core','30') ,
('Mouse','15')
hasilnyanah sekarang mari kita coba untuk membuat Trigger pada table Pembelian
USE TOKO_PINTAR
GO
Create trigger tr_pembelian on pembelian
for insert,update
as
IF EXISTS (Select PD1.nama_barang FROM Product PD1 JOIN inserted i1 on PD1.nama_barang = i1.nama_barang)
update PD set PD.stok = PD.stok + i.jumlah
from Product PD join inserted i on PD.nama_barang= i.nama_barang
ELSE
INSERT Product (nama_barang ,stok)SELECT
i3.nama_barang,i3.jumlah
FROM inserted i3
UPDATE pembelian SET kode_product = P.kode_product
FROM Product P JOIN pembelian ON pembelian.nama_barang = P.nama_barang
kita coba untuk Insert Row baru namun dengan nama barang yang sudah ada di tabel ProductINSERT INTO PEMBELIAN(nama_barang,jumlah) VALUES('Flashdisk 16 GB','2')
mari kita lihat hasilnya
sekarang kita coba untuk insert barang baru lewat tabel pembelian
INSERT INTO PEMBELIAN(nama_barang,jumlah) VALUES('Hardisk Eksternal 1 TB','35')
berikut adalah trigger untuk penjualan
USE TOKO_PINTAR
GO
CREATE trigger tr_penjualan on penjualan
for insert,update
as
IF EXISTS (Select PD1.nama_barang FROM Product PD1 JOIN inserted i1 on PD1.nama_barang = i1.nama_barang)
update PD set PD.stok = PD.stok - i.jumlah
from Product PD join inserted i on PD.nama_barang= i.nama_barang
ELSE
SELECT 'barang dengan nama '+i2.nama_barang + ' tidak dapat ditemukan dalam database'
FROM inserted i2
UPDATE penjualan SET kode_product = P.kode_product
FROM Product P JOIN penjualan ON penjualan.nama_barang = P.nama_barang
Sekarang mari kita insert penjualan
INSERT INTO Penjualan(nama_barang,jumlah) VALUES('Flashdisk 16 GB','10')
nah..berikut mari kita lihat hasilnya




testing comment ah...sukses selalu...
ReplyDeletesemangkaaaa......