Wednesday 12 September 2012

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!

No comments:
Write comments