menu

Sunday, April 3, 2011

SQL Server Trigger



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 cinta satu sama lain trigger, sehingga akan dibuat se-ngawur se-simpel mungkin dan tanpa memperhatikan normalisasi. sedangkan untuk normalisasi sendiri akan sama-sama kita bahas di thread lain... hehe

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')
hasilnya




nah 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 Product

INSERT 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




1 comment:

  1. testing comment ah...sukses selalu...
    semangkaaaa......

    ReplyDelete