sql server 2008 - Calcualting fileds through trigger in MSSQL? -
i have 2 tables product
, shop
have trigger works when product added shop, updates product quantity
shop when inserted , total price
fields of product quantity , unit price. quantity updated correctly.
the problem is: total price
not updated correctly. problem?
alter trigger [dbo].[trg_updtproqty] on [dbo].[shop] insert begin -- update product quantity , total price shop table update pd set pd.qty = pd.qty-i.qty, pd.tprice=pd.uprice*pd.qty dbo.product pd inner join inserted on pd.pid = i.pid end
updates not happen in order write them in, i.e. in original update statement have:
set pd.qty = pd.qty-i.qty, pd.tprice=pd.uprice*pd.qty
when setting tprice
value of pd.qty
still original value, should
set pd.qty = pd.qty-i.qty, pd.tprice=pd.uprice*(pd.qty-i.qty)
if tprice
such simple calculation , may want not bother storing @ all, , use computed column:
alter table dbo.product drop column tprice; go alter table dbo.product add tprice uprice * qty;
then wouldn't have worry keeping date, automatically refresh whenever quantity or price changed.
addendum
in order capture updates shop table, need make trigger insert
, update
, need reference memory resident table deleted
in trigger find out actual change is, given deleted.qty - inserted.qty
, trigger end like:
alter trigger [dbo].[trg_updtproqty] on [dbo].[shop] insert, update begin -- update product quantity , total price shop table update pd set pd.qty = pd.qty + (isnull(d.qty, 0) - i.qty), pd.tprice = pd.uprice * (pd.qty + (isnull(d.qty, 0) - i.qty)) dbo.product pd inner join inserted on pd.pid = i.pid left join deleted d on d.pid = pd.pid; end
Comments
Post a Comment