繁体   English   中英

等效于SQL Server上的Oracle if-else触发器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM