Anda di halaman 1dari 9

PEMROGRAMAN

TRIGGER PADA SQL SERVER

Oleh :

Ahmad Arfai Syukri (11.51.013)

SEKOLAH TINGGI MANAJEMEN


INFORMATIKA DAN KOMPUTER
(STMIK DENPASAR)
Trigger Pada SQL Server
Trigger adalah program yang dieksekusi oleh DBMS ketika suatu event terjadi,
Trigger merupakan store procedure yang dijalankan secara automatis saat user
melakukan modifikasi data pada tabel. Trigger diaplikasikan pada tabel atau view.
Sebuah tabel atau view dapat memiliki lebih dari 1 trigger. Tetapi sebuah trigger
hanya digunakan pada 1 tabel atau view. Trigger dijalankan karena request insert,
update, atau delete pada suatu tabel atau view. INSERT , UPDATE dan DELETE bisa
digabung jadi satu trigger yang dinamakan Multiple Trigger.

3 Tipe trigger:

 BEFORE (insert, update, delete)


 INSTEAD OF (insert, update, delete)
 AFTER (insert, update, delete)

Total ada 9 tipe trigger.

SQL Server hanya mensupport 6 tipe trigger. Hanya tipe AFTER dan INSTEAD OF
saja.

Kegunaan TRIGGER

• Menghasilkan nilai yang sudah ditentukan

• Mengupdate View

• Melaksanakan Aksi dengan referensi integritas

Membuat TRIGGER

Klausa FOR memiliki default untuk klausa AFTER. Sql_statement merupakan


Transact-SQL, bisa ada definisi variable, query, control-of-flow (IF, ELSE, WHILE,
BEGIN – END).

CREATE TRIGGER [nama_trigger]

ON [table atau view]

{ FOR | AFTER | INSTEAD OF }

{ [DELETE] [,] [INSERT] [,] [UPDATE] }

AS

[sql_statement]
Sample Studi Kasus TRIGGER

Database KAMPUS memiliki table MHS, MK, dan NILAIMHS, dengan data sbb:

 Membuat TRIGGER untuk table NILAIMHS agar jika ada INSERT /


UPDATE / DELETE di table NILAIMHS, maka secara otomatis kolom IPK
di table MHS segera bisa terupdate oleh system database.

CREATE TRIGGER IPK_MHS ON NILAIMHS

AFTER INSERT, UPDATE, DELETE

AS

DECLARE

@NPMMHS varchar(6),

@IPKMHS real;

select @NPMMHS=NPM from NILAIMHS;

select @IPKMHS =CONVERT(real, sum((ASCII(‘E’)-

ASCII(NILAIMHS.NilaiAbjad))*MK.SKS))/CONVERT(real,

sum(MK.SKS))

from NILAIMHS, MK

where NILAIMHS.KodeMK = MK.KodeMK

group by NILAIMHS.NPM

having NILAIMHS.NPM = @NPMMHS;

update MHS set IPK = @IPKMHS where NPM = @NPMMHS;


Coba test dengan SQL insert berikut ini :

1. Insert into NILAIMHS values (‘M-001’,’K-003’, ‘B’)


2. Insert into NILAIMHS values ( ‘M-002’,’K-001’, ‘A’)
3. Insert into NILAIMHS values ( ‘M-001’,’K-004’, ‘C’)

Cek apakah kolom IPK di table MHS berubah.

Select * from MHS

Lakukan untuk kasus UPDATE dan DELETE. Membuat TRIGGER untuk table MK
agar jika ada INSERT / UPDATE dengan SKS tidak sesuai bisa dibatalkan, cara
membatalkan dengan statement ROLLBACK TRANSACTION.

CREATE TRIGGER CEK_SKS_MK ON MK

AFTER INSERT, UPDATE

AS

DECLARE

@SKSMK int;

select @SKSMK=SKS from MK;

IF (@SKSMK <= 0)

BEGIN

RAISERROR (SKS harus lebih dari 0′,16,1);

ROLLBACK TRANSACTION

END

Mengubah TRIGGER

ALTER TRIGGER [nama_trigger]

ON [table atau view]

{ FOR | AFTER | INSTEAD OF }

{ [DELETE] [,] [INSERT] [,] [UPDATE] }

AS

[sql_statement]
Menghapus TRIGGER

Sample :

DROP TRIGGER IPK_HS;

DROP TRIGGER [nama_trigger]

Create/Update/Delete TRIGGER dari SQL Server Enterprise Manager

 Pilih Databases – Tables – Klik Kanan – All Task – Manage Triggers..

Create/Update/Delete TRIGGER dari SQL Server Enterprise Manager (cont.)

 Anda bisa create <new>, edit, atau hapus Trigger dari Form Trigger Properties

Sample Trigger : Set Default value

CREATE TRIGGER TRANSACTION AskingPrice InitialValue

AFTER INSERT ON TRANSACTION


DECLARE

rowcount as int;

sumNetPrice as numeric (10,2);

avgNetPrice as numeric (8,2)

/* First find it work has been here before */

SELECT Count (*) INTO rowcount

FROM TRANSACTION T

WHERE newWordID = T.WorkID;

IF rowcount = 1 THEN

/* This is the first time work has been in gallery */

New:AskingPrice = 2 * new:AcquitionsPrice;

ELSE

IF rowcount > 1 THEN

/* work has been done here before */

SELECT Sum(NetPrice) INTO sumNetPrice

FROM ArtistWorkNew AW

WHERE AW.WorkID = new.WorkID

GROUP BY AW.WorkID;

avgNetPrice = sumNetPrice / (rowcount – 1);

/* Now choose larger */

IF avgNetPrice > 2 * newAcquistionPrice Then

new:AskingPrice = avgNetPrice;

ELSE

new:AskingPrice = avgNetPrice;

END IF
ELSE

/* Errr, rowcount cannot less then 1, Do something */

END IF;

END IF;

END;

Cara Membuat Trigger Di SQL Server

Bagaimanakah cara membuat trigger di SQL SERVER ?


Pada contoh membuat trigger di sini anda harus mempunyai SQL Server terinstall di
computer anda lengkap dengan Enterprise Manager-nya.

Contoh membuat trigger pada SQL Server 2000.


Kasus-nya adalah sebagai berikut:
Tabel penjualan memiliki field-field Nomor_Penjualan, Tanggal_Penjualan,
Nama_Suplier, Bulan dan Tahun. Data yang dimasukkan dari aplikasi adalah data
Tanggal_Penjualan dan Nama_Pelanggan. Data Bulan dan Tahun akan diisi oleh
trigger berdasarkan data dari field Tanggal_Penjualan. Misalnya Tanggal penjualan
adalah 20 Mei 2009, maka trigger pada table penjualan akan mengupdate data field
Bulan dengan angka 5 dan field tahun dengan angka 2009. Data field
Nomor_Penjualan adalah autoincrement sehingga tidak perlu diberi nilainya pada saat
penambahan data.

Langkah-langkah membuat trigger di SQL Server 2000 adalah:

Buat table penjualan pada database anda dengan field-field Nomor_Penjualan,


Tanggal_Penjualan, Nama_Pelanggan, Bulan dan Tahun.

Pada design view di SQL Server Enterprise Manager klik icon triggers.

Akan muncul dialog box Trigger Properties.


Isi Text dari Trigger Properties yang ada dengan perintah Transact-SQL berikut:

CREATE TRIGGER [ISIDATABULANDANTAHUN] ON dbo.PENJUALAN


FOR INSERT,UPDATE
AS
DECLARE
@NO_PENJUALAN int,
@BULAN int,
@TAHUN int

SELECT
@NO_PENJUALAN=NOMOR_PENJUALAN,
@BULAN=MONTH(TANGGAL_PENJUALAN),
@TAHUN=YEAR(TANGGAL_PENJUALAN)
FROM INSERTED;

BEGIN
UPDATE PENJUALAN SET BULAN=@BULAN,TAHUN=@TAHUN
WHERE NOMOR_PENJUALAN=@NO_PENJUALAN;
END

Untuk memeriksa sintaks penulisan sudah benar atau belum klik tombol Check
Syntax. Jika penulisan sitak SQL masih salah akan muncul peringatan error. Klik
tombol OK untuk menyimpan trigger. Klik tombol Close untuk menutup Trigger
Properties

Mencoba hasil trigger yang baru saja kita buat.


Untuk mencoba trigger yang baru saja dibuat kita harus mengisi data pada tabel
penjualan. Ada berbagai cara untuk mengisi data ke dalam tabel penjualan. Pada
contoh ini saya akan menggunakan perintah Insert dengan menggunakan SQL Query
Analizer.

Jalankan program SQL Query Analizer dan login ke SQL Server dengan privilages
setingkat user administrator
Aktifkan database di mana kita menyimpan tabel penjualan.
Tuliskan perintah berikut:

insert into penjualan (tanggal_penjualan,nama_pelanggan) values ('05/20/2009','Budi


Siswanto');
select * from penjualan;

Tekan F5 pada keyboard untuk mengeksekusi perintah SQL yang baru saja kita tulis.
Hasilnya seperti pada gambar berikut:

Pada perintah sql di atas kita tidak menyertakan data bulan dan tahun, tetapi data feld
bulan dan tahun pada tabel penjualan mempunyai nilai 5 dan 2009 sesuai dengan
tanggal_penjualan.

Anda mungkin juga menyukai