membuat trigger di SQL Server 2005
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
20 comments so far
Leave a reply


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
[...] 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 [...]
a nice post
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…