membuat trigger di SQL Server 2005 part 2: trigger ketika delete

untuk melanjutkan artikel saya yang berjudul membuat trigger di SQL Server 2005 serta menjawab pertanyaannya ayif saya akan memberikan contoh trigger after delete

anda harus membaca artikel membuat trigger di SQL Server 2005 terlebih dahulu untuk mempersiapkan lingkungan database ( buat table baru, dan populasi datanya)

ide dari trigger yang akan saya utarakan disini adalah supaya ketika data di tabel pembelian terhapus, otomatis data jumlah stock barang dari barang yang terhapus di tabel pembelian tadi berkurang. kode triggernya seperti ini

create trigger kurangiStockbarang on pembelian
for delete
as
update b set b.bar_stock = b.bar_stock – d.pem_jumlah
from barang b join deleted d on b.bar_id = d.bar_id

sebenarnya hampir sama dengan kode trigger ketika penambahan barang baru, saya memberi tanda yang bercetak tebal adalah kode yang saya rubah dari kode trigger dari artikel pertama

perbedaan paling mencolok adalah untuk menangkap nilai dari tabel yang dihapus anda mengunakan tabel virtual yang bernama deleted

yang perlu diperhatikan adalah struktur tabel contoh diatas (tabel barang dan table pembelian) kemungkinan tidak cocok untuk dijalankan pada kondisi yang sebenarnya. karena biasanya transaksi pembelian memungkinkan untuk pembelian barang lebih dari 1 macam barang, dan struktur tabel yang saya pakai tidak memungkinkan hal tersebut. karena dalam pembuatan tabel tersebut saya lebih menekankan contoh pemakaian trigger di SQL server 2005

9 thoughts on “membuat trigger di SQL Server 2005 part 2: trigger ketika delete

  1. budi

    mas trigger deletenya cuma bisa berjalan kalo menghapus datanya satu-persatu y? cz saya coba untuk menghapus data pembelian misalnya menurut bar_id nya. dia g bisa. O y mas kalo trigger update gimana?saya kesulitan nih. Karena ada yang bilang clone tabel pembelian aja.

    Balas
  2. indra

    oh.. iya kah tidak terhapus😕

    memang di dalam triger tidak ada virtual tabel untuk updated, namun anda bisa mengunakan inserted dan deleted.
    nilai deleted adalah nilai yg lama dan inserted adalah nilai yang baru
    memang sedikit tricky namun bisa

    silahkan dicoba

    Balas
  3. budi

    Saya jelasin aja d biar saya juga g bingung. saya sedang buat aplikasi VB.NET 2005 dengan database SQL SERVER 2005 yang banyak melibatkan keluar masuknya stok. trigger delete yang saya maksud tidak bisa. contohnya :
    di tabel pembelian ada data sbb :
    (pem_id) (bar_id) (pem_jumlah)
    1,1,10
    2,2,20
    3,1,25
    misalkan saya mencoba menghapus data pembelian dengan bar_id = 1 menggunakan VB. tentunya ada 2 data yang terhapus. dan memang terhapus di tabel pembelian. namun pada tabel barang untuk bar_id = 1 hanya berkurang sebesar 10. mengapa y mas..?
    Oh y mas terima kasih untuk masukkan trigger updatenya, Sudah berhasil.

    Balas
  4. aryanto

    Sebelum nya saya ucapkan selamat sore kepada mas Indra,
    saya ada permasalahan di SQL SERVER untuk tugas kuliah nih mas. Masalah nya kira2 begini =
    Saya bikin ada 2 tabel, sbagai berikut :
    – Tabel Transaksi = ID_TRANSAKSI int Primary Key,
    GRAND_TOTAL int

    – Tabel Transaksi_Detail = ID_TRANSAKSI int Foreign Key,
    NAMA_MENU varchar (30), HARGA money,
    JUMLAH_PESANAN int, SUB_TOTAL money

    Nah bagaimana cara nya ketika saya input data ke Tabel Transaksi_Detail, misal nya=
    insert into Transaksi_Detail values (‘TEH ‘, 1000,1,1000)
    insert into Transaksi_Detail values (‘RISOL’, 1000,2,2000)
    insert into Transaksi_Detail values (‘KOPI’, 1000,1, 1000)

    Lalu hasil nya ketika di
    SELECT * FROM TRANSAKSI
    SELECT * FROM TRANSAKSI_DETAIL
    menjadi seperti dibawah ini =

    ID_TRANSAKSI GRAND_TOTAL
    ————————————————-
    1 5000

    ID_TRANSAKSI NAMA_MENU HARGA JUMLAH_PESANAN SUB_TOTAL
    ———————————————————-
    1 TEH 1000 1 1000
    1 RISOL 1000 2 2000
    1 KOPI 2000 1 2000

    Jadi ketika kita insert data di Tabel Transaksi_Detail, maka sistem akan secara otomatis menghitung field dari SUB_TOTAL dan meng-INSERT hasil nya ke Field GRAND_TOTAL di dalam Tabel TRANSAKSI.

    Mohon Bantuannya
    Terima Kasih

    Balas
  5. bowo

    Mas,saya mo tanya nich. Kalo bikin trigger di SQL Server 2005 linknya antar server and antar database gimana?

    Ex_1:
    server_1->database_X->table_a
    server_1->database_Y->table_a

    Ex_2:
    server_1->database_X->table_a
    server_2->database_Y->table_a

    Saya mau jika ada perubahan data di server_1->database_X->table_a baik update,delete or insert di database_Y->table_a juga terjadi. Dan seperti contoh ke-2 juga sama. Jadi gimana caranya bikin trigger antar database dan antar server..??? Bisa gak..??

    Saya lagi kesulitan nich,mohon dibantu. Makasih…!!!

    Balas
  6. uind

    saya ingin membuat trigger saat insert.
    misalkan ada tabel A, B, dan C.
    A berelasi ke B, dan C berelasi ke B.
    Data A sudah ada, kemudian saya ingin menambahkan data ke C dengan memilih salah satu record A yang akan disimpan pada tabel B. Saat menambahkan data ke C, saya ingin membuat trigger untuk otomatis menambah record baru pada tabel B yang menyimpan id dari A yang dipilih tadi dan id C yang baru di buat. Dengan catatan id C merupakan auto number.

    Mohon bantuannya?

    Balas
  7. Ping balik: SQL : Membuat tabel Log menggunakan Trigger si SQL Server 2005 « NET dotBLOG

  8. Mei. (@meililiaa)

    saya mau ngimplementasikan trigger, antara tabel peminjaman dan tabel pengembalian.
    jadi di tabel peminjaman itu ada atribut id_pinjam, NIM, Kode_Buku,tgl_pinjam dan tgl_kembali, nah di tabel pengembalian itu ada id_kembali, id_pinjam, NIM, Kode_Buku,tgl_pinjam,tgl_kembali, nnterlambat dan denda.
    konsepnya jadi gini, di tabel pengembalian kan ada semua atribut dari tabel peminjaman, jadi saat id_pinjam di submit di tabel pengembalian semua isi dr tabel peminjaman muncul, nah saat di save isi dari tabel peminjaman itu terhapus semua.. bagaimana query trigger yg harus di gunakan??? tolong dibalas trims sblmnya🙂

    Balas

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s