Berikut adalah cara membuat trigger pada SQL Server
untuk memudahkan pembuatan triiger yang mengakses tabel maka perlu dibuatkan 2 tabel sebagai contoh : nama table : Person dan logPersen, dengan isi dan field pada tabel dibawah :
Person
Kode | Nama | Umur |
MB | Mike Bun | 25 |
logPerson
Kode | Nama | Umur | Keterangan |
format :
CREATE [ OR ALTER ] TRIGGER [ schema_name . ]trigger_name
ON { table | view }
[ WITH <dml_trigger_option> [ ,...n ] ]
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME <method specifier [ ; ] > }
<dml_trigger_option> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]
<method_specifier> ::=
assembly_name.class_name.method_name
Format simple :
CREATE OR ALTER TRIGGER [nama_trigger]
ON [table atau view]
{ FOR | AFTER | INSTEAD OF }
{ [DELETE] [,] [INSERT] [,] [UPDATE] }
AS
[sql_statement]
Contoh :
Create OR Alter Trigger logPerson on Person
FOR INSERT, UPDATE, DELETE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
if(exists(select 1 from inserted))
begin
Insert logPerson (kode, nama, umur, keterangan) values (new.kode, new.nama, new.umur, 'Insert Penambahan baru');
end
if(exists(select 1 from updated))
begin
Insert logPerson (kode, nama, umur, status) values (old.kode, old.nama, old.umur, 'Simpan data lama sebelum diUpdate');
Insert logPerson (kode, nama, umur, status) values (new.kode, new.nama, new.umur, 'Insert penambahan baru setelah diUpdate');
end
if(exists(select 1 from deleted))
begin
Insert logPerson (kode, nama, umur, status) values (old.kode, old.nama, old.umur, 'data yang telah dihapus ');
end
End
Go
Menjalankan :
Insert person(kode, nama, umur) values ('JT', 'Johanes Tan', 30);
Hasil :
Persen
Kode | Nama | Umur |
MB | Mike Bun | 25 |
JT | Johanes Tan | 30 |
logPerson
Kode | Nama | Umur | Keterangan |
JT | Johanes Tan | 30 | Insert Penambahan Baru |
update person set umur 35 where kode = 'JT';
Hasil :
Persen
Kode | Nama | Umur |
MB | Mike Bun | 25 |
JT | Johanes Tan | 35 |
logPerson
Kode | Nama | Umur | Status |
JT | Johanes Tan | 30 | Insert Penambahan Baru |
JT | Johanes Tan | 30 | Simpan data lama sebelum diUpdate |
JT | Johanes Tan | 35 | Insert penambahan baru setelah diUpdate |
Delete from person where kode = 'MB';
Kode | Nama | Umur |
JT | Johanes Tan | 35 |
logPerson
Kode | Nama | Umur | Keterangan |
JT | Johanes Tan | 30 | Insert Penambahan Baru |
JT | Johanes Tan | 30 | Simpan data lama sebelum diUpdate |
JT | Johanes Tan | 35 | Insert penambahan baru karena perubahan lama |
MB | Mike Bun | 25 | data yang telah dihapus |