For Each Row pada Trigger di Sql Server 2008
2:07 PMNah, 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 + 1Nah ini dia hasilnya pada Tabel TesB :

Semoga bermanfaat :D
0 comments: