dulu saya sempat beranggapan bahwa trigger itu hanya ada di oracle, ternyata salah besar… 🙂
trigger juga ada di SQL Server
tapi sebelumnya apa itu trigger
saya mencoba menjelaskan dengan bahasa yg paling sedergana ya, kalau diartikan langsung ke bahasa trigger itu artinya adalah pemicu, namun jika dihubungkan ke database, trigger artinya kode SQL yang dikerjakan oleh DBMS ketika suatu kejadian terjadi.n dalam hal ini jika perintah INSERT, UPDATE, atau DELETE dijalankan di DBMS, beribet ya penjelasannya? :p
OK, saya kasih contoh sederhanan saja ya.. misalnya saya punya 2 tabel..tabel barang dan tabel pembelian, untuk lebih jelasnya bisa dilihat pada gambar dibawah ini. dalam tabel barang tersebut ada nama barang dan jumlah stock , IDEnya adalah ketika tabel pembelian ditambahkan, jumlah stock barang akan terupdate secara otomatis.misalnya ketika barang A dibeli sejumlah 3 buah maka nanti stock barang akan bertambah 3 secara otomatis. proses tersebut bisa dilakukan dgn trigger
menurut MSDN, syntac dari trigger adalah sebagai berikut
Syntax
CREATE TRIGGER trigger_name
ON { table | view }
[ WITH ENCRYPTION ]
{
{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS
[ { IF UPDATE ( column )
[ { AND | OR } UPDATE ( column ) ]
[ …n ]
| IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )
{ comparison_operator } column_bitmask [ …n ]
} ]
sql_statement [ …n ]
}
}
biar lebih mengerti, kita mulai dengan contoh.. jadi kita butuh membuat 2 tabel tersebut di SQL server 2005, script sebagai berikut
create table BARANG
(
BAR_ID int not null,
BAR_NAMA varchar(255) not null,
BAR_STOCK int null
default 0,
constraint PK_BARANG primary key (BAR_ID)
)
go
create table PEMBELIAN
(
PEM_ID int not null,
BAR_ID int null ,
PEM_JUMLAH int null ,
constraint PK_PEMBELIAN primary key (PEM_ID)
)
go
create index RELATION_FK on PEMBELIAN (BAR_ID)
go
alter table PEMBELIAN
add constraint FK_PEMBELIA_RELATION_BARANG foreign key (BAR_ID)
references BARANG (BAR_ID)
go
INSERT INTO BARANG (BAR_ID,BAR_NAMA) VALUES (1,’AQUA’);
INSERT INTO BARANG (BAR_ID,BAR_NAMA) VALUES (2,’TOTAL’);
INSERT INTO BARANG (BAR_ID,BAR_NAMA) VALUES (3,’AQUADES’);
setelah anda menjalankan script tersebut, maka anda akan mempunyai 2 tabel, yaitu tabel barang dengan isi 3 buah data, dan tabel pembelian dengan data masih kosong.3 data di tabel barang tersebut secara defaut stocknya adalah 0
kemudian saatnya kita buat trigger sehingga ketika kita menambahkan data di tabel pembelian dengan jumlah pembelian barang tertentu, maka stock di tabel barang akan bertambah sesuai dengan barang yg dibeli, syntac trigger tersebut adalah sebagai berikut
create trigger tambahStockbarang on pembelian
for insert
as
update b set b.bar_stock = b.bar_stock + i.pem_jumlah
from barang b join inserted i on b.bar_id = i.bar_id
arti dari kode tersebut adalah sebagai berikut
create trigger tambahStockbarang on pembelian
membuat trigger dengan nama tambahStockBarang dimana trigger tersebut akan terpicu jika ada perubahan di tabel pembelian
for insert
as
perubahan tersebut adalah penambahan(insert) di tabel pembelian , selain penambahan bisa juga diisi dengan perubahan(update) atau penghapusan(delete)
for disini juga bisa rubah isinya jadi after atau instead of . perbedaanya adalah waktu trigger dikerjakan, biasaya yg sering digunakan adalah for
update b set b.bar_stock = b.bar_stock + i.pem_jumlah
from barang b join inserted i on b.bar_id = i.bar_id
ini adalah kode yg dikerjakan ketika kejadian trigger terpicu, kode diatas bertujuan merubah nilai bar_stock pada tabel barang dengan menambahkan nilai bar_stock yg sekarang dengan jumlah barang yg dibeli (pem_jumlah). perhatikan disini ada tabel yang bernama inserted, tabel tersebut merupakan tabel logika yg digunakan untuk menyimpan data yang memicu terjadinya trigger, dalam hal ini nilai data yg dimasukkan(insert) kedalam tabel pembelian, selain inserted, tabel logika lainnya adalah deleted, tabel logika ini digunakan untuk trigger yg terpicu dengan kejadian delete
kita coba masukkan kode berikut
INSERT INTO PEMBELIAN (PEM_ID, BAR_ID, PEM_JUMLAH) VALUES (1,1,4);
INSERT INTO PEMBELIAN (PEM_ID, BAR_ID, PEM_JUMLAH) VALUES (2,3,2);
INSERT INTO PEMBELIAN (PEM_ID, BAR_ID, PEM_JUMLAH) VALUES (3,1,1);
arti kode tersebut
pem_id haruslah beda karena merupakan primary key
beli aqua(kode bar_id=1) sebanyak 4
beli aquades (kode bar_id=3) sebanyak 2
beli aqua lagi sebanyak 1
sehingga secara keseluruhan yg dibeli aqua sebanyak 5 dan aquades sebanyak 2
karena default nilai stock barang adalah 0, maka seharusnya nilai aqua 5 dan aquades 2 adalah jumlah stock barang sekarang ini
dan kita lihat data barang… walah
sekian tutorial kali ini tentang membuat trigger di SQL Server, semoga bisa membantu yg lagi kesusahan bikin Tugas Akhir ata pekerjaan
anda bisa belajar tentang bagaimana membuat trigger yang berjalan ketika ada event delete, baca lanjutan artikel ini di membuat trigger di SQL Server 2005 part 2: trigger ketika delete
ok help full…
tapi saya lagi kerepotan neh..
mohon bantuannya dan penjelasannya yah…
saya saat ini sedang ingin implementasi partisi dengan view…tapi kenapa tidak pernah berhasil?
dlm tabel
sudah saya terapkan primary key….
apa bisa saya manfaatkan trigger?
tolong diberikan pencerahan yah..
indra:bisa lebih dijelaskan maksud dari partisi dengan view?
saya belum bisa menangkap maksud yang anda sampaikan
thx, it’s help me A LOT!!!.. perbanyak donk tutorial SQL nya
thanks bnyk. ada tutorial ttg oracle form jg nggak 😀
boleh minta bantuan aku lagi nyari2 sintax trigger after delete di sql server 2005 supaya pas kita nge delete di tabel pemesanan otomatis bertambah ke tabel stok barang….
kirim lewat email zoelpiero@yahoo.co.uk
Ping balik: membuat trigger di SQL Server 2005 part 2: trigger ketika delete « indra kharisma
a nice post 😀
Mas, minta yang Trigger Update dung,……g berhasil nih,….bingung……..
sourcenya dikirim ke emailq ya,..
panjiusw@gmail.com
terimakasih sebelumnya,….
salam kenal q mao bljr sql neeh, tp masih pemula tolg ajari q cara buat data base d xamp? n q minta linkx y………?
Thx banget buat tutorial nya. Kebetulan ak lagi cari informasi tentang trigger. Lumayan membantu deh. soalnya krmn ak baca di buku gak begitu jelas.
mas..klo bwt polling gt bsa pake trigger jg g?
kn ktny mas..trigger hnya untuk pnambahan yg lbh dr satu mcam..
klo polling gt kan cmn nambahin 1 macam, dan nili yng ditambahinnya jg 1.tu gmn mas…?
saya lg bikin TA ttg pemungutan suara pake ASP.net ma Sal Server 2005..
malah mentok disitu..maklum..g ngrti..mohon bantuan+solusinya ya mas..!!
indera: maksudnya cuma hanya 1 perintah yang dijalankan? kalau memang begitu coba bikin store procedures yang nantinya dipanggil oleh trigger
selamat mencoba
thanks. bisa dijadikan bahan bacaan.
saya sedang mengalami kesulitan.
Knp di sqlserver enterprise saya tidak bisa menjalakan coding :
USE TESTER;
GO
CREATE TRIGGER CONNECT_LIM_TRIGGER6
ON ALL SERVER WITH EXECUTE AS ‘login_tes’
FOR LOGON
AS
BEGIN
IF ORIGINAL_LOGIN()= ‘login_tes’ AND
(SELECT COUNT(*) FROM SYS.DM_EXEC_SESSIONS WHERE IS_USER_PROCESS = 1 AND ORIGINAL_LOGIN_NAME = ‘login_tes’) = 1
commit;
END;
Ada pesan error : “LOGON” is invalid event type. padahal ini seharusnya event yg valid di sql server.
siapa yg tau solusinya please email ke yocki@hotmail.com
makasih atas informasinya tentang trigger mas…
mas…
kalo punya tabel nasabah yang field2 nya
– noRek, nama saldo
trus da table transaksi
NoTrans,No_rek, SaldoMasuk…
nah…
ketika masukin jumlah di saldo masuk,
trus bagaiman supaya saldo di table nasabah ikut berubah juga, ditambah dengan saldo masuk????
mohon bantuannya…
tamaboys@gmail.com
saya ingin membuat web menggunakan joomla, tetapi saya kurang mengrti memasukan database nya, saya pengen mengguakan dadatbase Mysql..
mas sy mau tnya
kebetulan saya lagi belajar buat sms center, nah autoreplynya saya buat dengan bantuan trigger.
tapi yang saya masih bingung nanti format sms yg dikirimkan biar smscenternya bs bales gmn ya?(njalanin trigger tsb)
thanks
Mas, bagaimana kalau mengunakan looping untuk memasukan data mengunakan trigger, seperti memasukan data pada tabel pembelian yang mempunyai satu nota dan beberapa barang.
Kalau bisa dengan contoh sql-nya mas
mas bisa minta pencerahannya
Saya lagi belajar buat sms gateway, gimanasih caranya membuat trigger autoreply pada saat sms masuk, kebetulan saya pake databasenya sql server 2005.
Bisa share contohnya ya mas
thanks
dear yudha
berdasarkan deskripsi yang anda berikan, kemungkinan yang anda butuhkan bukan trigger yang telah dijelaskan diatas
namun lebih kepada event dari SMS gateway, ketika ada SMS masuk, gateway akan menangangkap sebuah event, pada event tersebut anda bisa melakuan perintah untuk mengirim SMS balasannya.
ok mas ,,,,,,,,,hatur nuhun
mas ,,,,,,perbedaan primarykey ma superkey apa???
koq eror ya??
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;
katanya eror near’on pembelian
for delete
as
update b set b.bar_stock = b.bar_stock – d.pem_jumlah
f’
padahal tabel pembelian sudah ad…
tlg jelaskan ya…
pgen belajar trigger…
jadi gw coba-coba deh…
Dear my broo Tommy,
———————————————————–
CREATE TRIGGER TR_Delete_on_Pembelian ON PEMBELIAN
FOR DELETE
AS
BEGIN
DECLARE @Pem_jumlah INT, @Bar_ID INT
SELECT @Pem_jumlah = PEM_JUMLAH,@Bar_ID = BAR_ID FROM Deleted
UPDATE BARANG SET BAR_STOCK = BAR_STOCK – @Pem_Jumlah
WHERE BAR_ID = @Bar_ID
END
GO
———————————————————
waah triger bikin puyeng, tapi bentar lagi harus ngajar basis data, tak ada jalan lain lagi kecuali belajar, oh ya mas q nginstall possgrees tapi kuk gak ada help nya ya???
Mas…Kalo misalnya dalam kasus yang mas berikan di atas kan kalau barang nya sudah ada di master Barang…tp kalo barang nya belum ada di master barang trigger nya bagaimana tuh mas?mohon pencerahannya
For Peter;
Pertama kali anda mencoba untuk memasukkan BAR_ID pada tabel Pembelian yang ternyata BAR_ID tersebut tidak di dalam tabel Barang maka pasti akan terjadi error “The INSERT statement conflicted with the FOREIGN KEY constraint “FK_PEMBELIA_RELATION_BARANG”.” Ini yang namanya refential integrity. Pemasukan data yg tidak valid dapat dilakukan dengan menggunakan blok TRY..CATCH untuk menagkap kesalahan.
Tetapi jika anda ingin melihat keberadaan BAR_ID tertentu bisa anda buat seperti :
——————————————————
create trigger tambahStockbarang on pembelian
for insert
as
BEGIN
DECLARE @Pem_jumlah INT, @Bar_ID INT
SELECT @Pem_jumlah = PEM_JUMLAH,@Bar_ID = BAR_ID FROM Inserted
IF EXISTS (SELECT 1 FROM BARANG WHERE BAR_ID = @Bar_ID)
BEGIN
update BARANG set BAR_STOCK = BAR_STOCK + @Pem_Jumlah
WHERE BAR_ID = @Bar_ID
END
ELSE
PRINT ‘Barang tidak ada, mohon masukkan data barang tersebut terlebih dahulu !’
END
GO
——————————————————
Yang saya nyakin trigger ini tidak akan terjadi karena SQL server sudah menangkap error dan menghentikan eksekusi. 🙂
Bos,
Implementasi trigger di bawah (sangat) mudah dilakukan di Oracle:
Saya pengen mengimplementasi trigger ini di SQL Server 2005, saya sudah mutar-mutar kesana-kemari, tapi solusinya ngga ketemu.
Gimana caranya?
regards,
nice brow,….
asli wong jowo
wah wah kebetulan nih lagi bingung!! juga nih
thank u postinganya keren abis
mas , mau tanya
apa di setiap akhir syntax di sql server 2005 selalu ada “GO” ?
terima kasih 🙂
Keren masbro,
Thanks ilmunya.
selamat sore ,mohon bantuannya saya sedang mencoba sql inventory ,bagaimana caranya saya ingin membuat sebuah output laporan yang berisi informasi barang selama 3 bulan dari pembelian tidak laku atau belum ada penjualan,terima kasih
oh ya maaf ada yang kurang Table yg sudah dibuat
Tabel DtBarang
Tabel Penjualan
Tabel ItemPenjualan
Tabel PEmbelian
Tabel ItemPembelian,
wah belum dibalas ni om 🙂
untuk idnya kenapa ngga identity aja?
Belum bisa dijlan kan triggernya.
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 🙂
saya mau input stok barang nya, tapi kenapa g mau ya kak ?
urgent ni kak tugas unk ikut uas.
please bantuannya.
terima kasih kak.. saya sdah bisa
Terimakasih Gan..sangat membantu.
thank’s gan ternyata artikel ini jd bahan referensi guru ane d sekolah…
Skype has launched its online-structured customer beta on the
world, after establishing it extensively in the U.S.
and You.K. before this calendar month. Skype for Web also now
works with Linux and Chromebook for immediate text messaging
conversation (no video and voice but, individuals need a connect-in installment).
The increase from the beta provides assist for a longer set of spoken languages to aid bolster that international usability