触发器---库存更新

crownsoft 2004-08-31 09:38:46

设有下三表:
1、入库主表(InStock):InStockNo(入库单号),WhID(仓库),BillConfirm(审核否)
2、入库子表(InStockDet):InStockNo(入库单号),Product(产品),QTY(数量)
3、库存表(Stock):Product,StockQTY,WhID

业务逻辑如下:
1、入库单必须审核或取消审核后才能更新库存
2、审核时只更改入库主表BillConfirm的状态,表示整单张全部审核

请问主表审核或取消审核时的触发器(UPDATE)该如何写?
...全文
212 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinaandys 2004-08-31
  • 打赏
  • 举报
回复
老大就出手了,怎不结贴了
zjcxc 元老 2004-08-31
  • 打赏
  • 举报
回复
--如果要考虑某些 Product,WhID 在 Stock 中不存在时,要新增,则改用:
create trigger tr_process_InStock on InStock
for update
as
if update(BillConfirm) --如果是进行审核,才进行处理
begin
select b.Product,a.WhID
,QTY=sum(case
when a.BillConfirm=1 --为1表示审核,为0表示取消审核
then QTY
else -QTY end)
into #t
from inserted a,InStockDet b
where a.InStockNo=b.InStockNo
group by b.Product,a.WhID

--更新已经存在的
update a set StockQTY=b.QTY
from Stock a,#t b
where a.InStockNo=b.InStockNo and a.WhID=b.WhID

--插入不存在的
insert Stock(Product,StockQTY,WhID)
select Product,QTY,WhID
from #t b
where not exists(
select * from Stock
where InStockNo=b.InStockNo and WhID=b.WhID)
end
zjcxc 元老 2004-08-31
  • 打赏
  • 举报
回复
create trigger tr_process_InStock on InStock
for update
as
if update(BillConfirm) --如果是进行审核,才进行处理
update a set StockQTY=b.QTY
from Stock a,(
select b.Product,a.WhID
,QTY=sum(case
when a.BillConfirm=1 --为1表示审核,为0表示取消审核
then QTY
else -QTY end)
from inserted a,InStockDet b
where a.InStockNo=b.InStockNo
group by b.Product,a.WhID
)b where a.InStockNo=b.InStockNo and a.WhID=b.WhID

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧