我们在前台有判断库存,但有时因为并发,偶尔还会出现负库存。请教一下,如何在触发器限制负库存
以下是我的sql触发器代码
CREATE TRIGGER xs_fhdmx_inserte ON dbo.xs_fhdmx
FOR insert
as
begin
update wz_sj_kc set kcs = isnull ( kcs , 0 ) - isnull ( a.shl , 0 ) , zl = isnull ( wz_sj_kc.zl , 0 ) - isnull ( a.zl , 0 ) , updrq = getdate()
from wz_sj_kc ,
(select mx_ckid , wlbh , sum( case when sajie ='0' then dws else 1 end * shl ) as shl ,
sum( isnull(pczl,0 ) + zk ) as zl
from inserted as a
where mx_ckid <> ''
group by mx_ckid , wlbh
) as a
where wz_sj_kc.ck_id = a.mx_ckid and
wz_sj_kc.wlbh = a.wlbh ;
insert into wz_sj_kc(ck_id , wlbh , kcs , zl , updrq)
select mx_ckid , wlbh , 0 - sum( case when sajie ='0' then dws else 1 end * shl ) , 0 - sum( isnull(pczl,0 ) + zk ) , getdate()
from inserted as a
where mx_ckid <> '' and
not exists (select 1 from wz_sj_kc where wz_sj_kc.ck_id = a.mx_ckid and wz_sj_kc.wlbh = a.wlbh )
group by mx_ckid , wlbh ;
end
------解决思路----------------------
你这个治标不治本阿。
应该解决并发的问题。
------解决思路----------------------
楼主把解决问题的方法寄希望于触发器,那没有触发器的数据库难道就不能用了吗?
解决方案应该是用事务来解决并发的问题.