[英]Equivalent of Oracle if-else trigger on SQL Server
我想创建一个销售表。 当销售表上有更新时,库存表中的数据应自动减少。
这是我在Oracle中的代码:
create trigger trigger_updatestok11
after insert
on transaksijualbeli for each row
begin
if (:new.kategoritransaksi in ('beli'))
then
update stokbarang set jumlahstok= jumlahstok +:new.jumlah
where Nobrg=:new.nobrg;
end if;
if (:new.kategoritransaksi in ('jual'))
then
update stokbarang set jumlahstok= jumlahstok -:new.jumlah
where Nobrg=:new.nobrg;
end if;
end;
如何在SQL Server中做到这一点?
首先,SQL Server触发器没有for each row
选项-触发器对每个语句触发一次 ,并且如果该INSERT
语句插入多行,则Inserted
将包含多行。 考虑到Inserted
可以(并且将要包含! )包含多行,您需要以一种适当的, 基于集合的方式编写触发器:
create trigger trigger_updatestok11
after insert
on transaksijualbeli
as
begin
update stokbarang
set jumlahstok = jumlahstok + i.jumlah
from Inserted i
where stokbarang.Nobrg = i.nobrg
and i.kategoritransaksi in ('beli');
update stokbarang
set jumlahstok= jumlahstok - i.jumlah
from Inserted i
where stokbarang.Nobrg = i.nobrg
and i.kategoritransaksi in ('jual');
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.