【问题标题】:Equivalent of Oracle if-else trigger on SQL Server相当于 SQL Server 上的 Oracle if-else 触发器
【发布时间】:2016-07-27 23:55:59
【问题描述】:

我想创建一个销售表。当sales表有更新时,stock表中的数据应该会自动减少。

这是我在 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 中做到这一点?

【问题讨论】:

  • 你试过了吗?你在哪里卡住了?
  • 相同的nobrg 会在transaksijualbeli 中出现多次吗?

标签: sql-server oracle triggers


【解决方案1】:

首先,SQL Server 触发器没有for each row 选项 - 触发器每个语句触发一次,如果INSERT 语句插入多行,@987654323 @ 将包含多行。考虑到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

【讨论】:

  • 触发器不应该处理具有相同nobrg 的多行transaksijualbeli 吗?
猜你喜欢
  • 2012-12-11
  • 1970-01-01
  • 2010-12-30
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
相关资源
最近更新 更多