For Each Row pada Trigger di Sql Server 2008

Pada trigger oracle, kita bisa menambahkan skrip FOR EACH ROW agar tiap baris record dapat memicu tereksekusinya trigger. Jadi misalkan kita punya sebuah tabel dengan 10 baris record. Saat kita update 10 record tadi secara bersamaan, trigger juga akan terpicu sebanyak 10 kali.

Nah, pada SQL Server 2008, trigger tidak berperilaku sebagaimana yang saya sebutkan tadi. Dan keyword FOR EACH ROW pun tidak ada. Ya, anda ga salah baca, karena memang tidak ada. Jadi seandainya kita mengupdate 1, 10 ataupun 1000 record secara bersamaan, trigger tetap akan terpicu 1 kali.

Lha terus gimana dong??

Kita bisa ngakali pake CURSOR. Jadi data yang terupdate tadi kita ambil perbarisnya dan kita eksekusi satu persatu. Hehe swt kan ni SQL Server 2008, emang swt banget :D

Oke, langsung contoh aje ye

CREATE TABLE [dbo].[TesB] (
[ID] int NULL,
[HasilTes] int NULL
)
ON [PRIMARY]
GO

CREATE TABLE [dbo].[TesA] (
[ID] int IDENTITY(1, 1) NOT FOR REPLICATION NOT NULL,
[Operan1] int NULL,
[Operan2] int NULL,
CONSTRAINT [TesA_pk] PRIMARY KEY CLUSTERED ([ID])
)
ON [PRIMARY]
GO

CREATE TRIGGER [
dbo].[TesA_tru] ON [dbo].[TesA]
WITH EXECUTE AS CALLER
FOR UPDATE
AS
BEGIN
declare @ID int,
@op1 int,
@op2 int,
@res int

declare mycur cursor for
select ID, Operan1, Operan2
from INSERTED

open mycur

fetch next from mycur
into @ID, @op1, @op2

while @@FETCH_STATUS = 0
begin
set @res = @op1 + @op2

insert into
dbo.TesB
values (@ID, @res)

fetch next from mycur
into @ID, @op1, @op2
end

close mycur
deallocate mycur
END
GO

insert into dbo.TesA values(1,1)
insert into dbo.TesA values(2,2)
insert into dbo.TesA values(3,3)
insert into dbo.TesA values(4,4)
insert into dbo.TesA values(5,5)


Data pada Tabel TesA akan tampak seperti ini :


Lalu kita coba memicu triggernya dengan perintah update

update dbo.TesA set Operan2 = Operan2 + 1


Nah ini dia hasilnya pada Tabel TesB :

Semoga bermanfaat :D