2016-04-07 1 views
0

Я хочу создать таблицу продаж. Когда в таблице продаж есть обновление, данные в таблице запаса должны автоматически уменьшаться.Эквивалент запуска Oracle if-else на 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?

+0

вы пробовали? Где вы застряли? – Tim

+0

Будет ли 'nobrg' появляться более одного раза в' transaksijualbeli'? – Squirrel

ответ

1

Прежде всего, триггера 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 
+0

- это не триггер, который должен обрабатывать несколько строк 'transaksijualbeli' с тем же' nobrg'? – Squirrel

Смежные вопросы