2016-04-07 41 views
0

'da Oracle if-else tetikleyicisi eşdeğeri Satış tablosu oluşturmak istiyorum. Satış tablosunda bir güncelleme olduğunda, stok tablosundaki veriler otomatik olarak azaltılmalıdır.SQL Server

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; 

nasıl SQL Server bunu yapabilir:

Bu Oracle benim kodudur? Her şeyden

+0

sen denediniz mi? Nereye takıldın? – Tim

+0

Aynı "nobrg", transaksijualbeli'de bir kereden fazla ortaya çıkar mı? – Squirrel

cevap

1

Birincisi, SQL Server tetikleyiciler bir for each row seçeneği yok - Tetik açıklamada başına bir kez harekete geçirilir ve bu INSERT deyimi takılı birden fazla satırda eğer Inserted birden fazla satır içerecek. Sen Inserted can dikkate alarak, uygun bir, seti tabanlı moda Tetikleyicinizi yazmaya gerek birden fazla satır içeriyor - böyle bir şey (ve olacak!):

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 
+0

tetikleyici, aynı "nobrg" olan birden çok "transaksijualbeli" satırı ele almalı mı? – Squirrel