Wednesday, 12 September 2012

Trigger SQL dengan Inserted dan Deleted Table Bag. II

 
Trigger SQL
Merupakan lanjutan belajar menggunakan trigger dari pembahasan sebelumnya


Triger adalah kode perintah atau prosedur yang dieksekusi oleh SQL Server sebagai respons dari beberapa tindakan yang dijalankan yaitu INSERT, DELETE dan UPDATE.
Jadi saat ada perintah Insert, Delete dan Update trigger secara otomatis akan dijalankan.
Untuk lebih jelasnya langsung kita mulai mencobanya.
Misalnya dalam stok barang di gudang ada tabel dibawah ini. 
Pada saat ada transaksi penambahan barang masuk pada table Trans_Masuk maka secara otomatis trigger akan memerintahkan table stock barang menambahkan data barangnya.
Demikian juga dengan pengurangan stok barang dilakukan secara otomatis saat ada transaksi keluar.
Buat trigger di tabel Trans_Masuk

CREATE TRIGGER UpdateStock ON Trans_Masuk
FOR INSERT,DELETE, UPDATE AS
BEGIN
 
   declare @Kodebarang as varchar(50)
   declare @Qty as int
   
   /*Kurangi data stock jika terjadi Delete atau Update data */
   Select @Kodebarang = Kodebarang,@Qty = Qty  from Deleted
   Update Stock_Barang Set Qty = Qty - @Qty  Where KodeBarang = @KodeBarang
    
    /*Cek apakah data barang sudah ada di tabel stock atau belum */
   Select @Kodebarang = Kodebarang,@Qty = Qty  from inserted
   
   if (select count(*) from Stock_Barang Where Kodebarang = @Kodebarang) = 0
Insert into Stock_Barang Select KodeBarang,Qty from Inserted
   else
   Update Stock_Barang Set Qty = Qty + @Qty  Where KodeBarang = @KodeBarang
END

Mari kita coba dengan menambahkan beberapa data

1. Tambahkan kodebarang BRG-004 sejumlah 25 pcs ke tabel Trans_Masuk
insert into Trans_Masuk values ('IN/1209/005','BRG-004',25,'PCS')

Kita lihat hasilnya pada table stock_barang akan bertambah 25 pcs.



2. Edit KodeBarang BRG-004 dari 25 PCS menjadi 30 PCS
Update Trans_Masuk Set Qty=30 Where KodetransIn='IN/1209/005' 
AND KodeBarang='BRG-004' AND Qty=25

Coba cek hasilnya berapa? Kalo stock nya menjadi 32 maka benar triggernya.



3. Tambahkan stock BRG-004 sebanyak 13 PCS
insert into Trans_Masuk values ('IN/1209/006','BRG-004',13,'PCS')

Jika hasilnya adalah 43 maka trigger berjalan benar

Semoga bermanfaat!

Trigger SQL dengan Inserted dan Deleted Table Bag. I

 
Trigger SQL Server Dua tabel spesial Inserted dan Deleted disediakan oleh SQL Server secara otomatis saat kita melakukan perintah insert dan delete terhadap baris data dalam tabel.

Tabel ini tidak bisa dilihat secara langsung melalui perintah

SELECT * FROM DELETED   atau   SELECT * FROM INSERTED

namun dapat digunakan saat terjadi eksekusi perintah insert, delete ataupun update, biasanya digunakan dalam trigger.

Contoh penggunaanya adalah dalam membuat Log Tabel
Misal Tabel Barang dan kita akan membuat log dari table Trans_Masuk

Setiap ada transaksi penambahan, perubahan maupun penghapusan data di  tabel Trans_Masuk maka trigger akan menambahkannya ke dalam tabel Log_Trans_Masuk

Trigger merupakan sekumpulan kode perintah yang akan berjalan secara otomatis oleh SQL Server setiap ada eksekusi INSERT, DELETE dan UPDATE, Lihat pembahasannya di sini

1. Trigger Insert dan Delete dari tabel Inserted dan Deleted

    Sekarang kita akan membuat trigger untuk INSERT dan DELETE memanfaatkan tabel Inserted dan Deleted


CREATE TRIGGER InsertLog_Trans_Masuk ON Trans_Masuk
FOR INSERT,DELETE AS
BEGIN
Insert into Log_Trans_Masuk
Select KodeTransIn,KodeBarang,Qty,null,Satuan,'Insert',GETDATE() from Inserted


Insert into Log_Trans_Masuk
Select KodeTransIn,KodeBarang,Qty,null,Satuan,'Delete',GETDATE() from Deleted
END


Sekarang coba masukkan data ke tabel Trans_Masuk misalnya 

insert into Trans_Masuk values ('IN/1209/001', 'BRG-001', 17, 'PCS')

Lihat hasilnya di tabel Trans_Masuk dan tabel Log_Trans_Masuk setelah proses Insert data




Nah sekarang lanjutkan dengan proses hapus data

Delete Trans_Masuk where KodeTransIn = 'IN/1209/001' AND KodeBarang = 'BRG-001'

Hasil dari tabel Trans_Masuk dan tabel Log_Trans_Masuk setelah proses Delete data adalah



2. Trigger Update dari tabel Inserted dan Deleted

    Untuk Trigger Update sebenarnya melakukan penghapusan data yang lama kemudian memasukkan data yang baru. Nah untuk itu kita akan memanggil tabel deleted dan inserted.
Berikut triggernya untuk Update dengan memanfaatkan tabel inserted dan deleted

CREATE TRIGGER InsertLog_Trans_Masuk2 ON Trans_Masuk
FOR UPDATE AS
BEGIN

Insert into Log_Trans_Masuk
Select a.KodeTransIn,a.KodeBarang,a.Qty,b.Qty,a.Satuan,'Update',GETDATE() from     Deleted a inner join
Inserted b ON a.KodeTransIn = b.KodeTransIn AND a.KodeBarang = b.KodeBarang
END

Nanti kolom QtyUpdate akan terisi secara otomatis setiap ada perubahan data Qty.
Contoh masukkan data ini terlebih dahulu.
insert into Trans_Masuk values ('IN/1209/002','BRG-002',21,'PCS')



Sekarang ganti nilai Qty dari 21 menjadi 30

Update Trans_Masuk Set Qty=30
where KodeTransIn = 'IN/1209/002' AND KodeBarang = 'BRG-002' AND Qty=21

Sekarang lihat hasilnya di tabel Trans_Masuk dan tabel Log_Trans_Masuk setelah proses Update data


Semoga bermanfaat!