关于入库的触发器或存储过程。

伤感的小强 2014-04-28 10:54:45
SQL-SERVER2008,在入库的时候遇到个困难。
具体描述:我用C#编了一个winform程序,但是入库的时候,插入同样名称规格的商品时,还是会新增加一条库存,求大神教写一个触发器或者存储过程,让入库时候,如果插入了库存已有的商品(根据商品名称,规格判定),则update库存数量,否则,新插入一条库存。
这是数据库:
具体插入:INSERT INTO
表:tb_Stock
插入的项(GoodsID,UserID,CompanyName,DepotName,GoodsName,GoodsNum,GoodsUnit,GoodsTime,GoodsSpec,GoodsPrice,SellPrice,Remark,NeedPay,HasPay,sort)其中,GoodsNum为库存数量,GoodsName为商品名称,GoodsPrice为商品规格。
...全文
226 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2014-04-28
  • 打赏
  • 举报
回复
按先更新后插入的原则进行.

-- 1.把要更新的数据存为临时表#t

-- 2.先更新tb_Stock
update a
 set a.GoodsNum=a.GoodsNum+b.[数量字段]
 from tb_Stock a
 inner join #t b on a.GoodsName=b.GoodsName and a.GoodsPrice=b.GoodsPrice

-- 3.后插入tb_Stock
insert into tb_Stock
(GoodsID,UserID,CompanyName,DepotName,GoodsName,GoodsNum,GoodsUnit,
 GoodsTime,GoodsSpec,GoodsPrice,SellPrice,Remark,NeedPay,HasPay,sort)
select [字段列表] 
 from #t a
 where not exists(select 1 from tb_Stock b
                  where a.GoodsName=b.GoodsName and a.GoodsPrice=b.GoodsPrice)
shinger126 2014-04-28
  • 打赏
  • 举报
回复
你入库单据程序插入数据时只插入数据,然后做一个过程来处理,单据流程增加一个审核,审核时调用过程
zmgowin 2014-04-28
  • 打赏
  • 举报
回复
改成merge的写法
伤感的小强 2014-04-28
  • 打赏
  • 举报
回复
那我要在程序里面用语句创建一个临时表#t, 然后再把原来是插入tb_stock的数据改为插入#t?
shinger126 2014-04-28
  • 打赏
  • 举报
回复
引用 5 楼 xdashewan 的回复:
做法上面那么多大大都给你解答了,我给你提个建议,出入库只做insert,别做update,入库插正数,出库插负数,这是良好的数据库设计,便于日后作账和统计
如果数据多这个做法就会造成效率低下,库存单独设计一个表,通过业务单据变化来更新库存表,否则要取库存就会很慢了
xdashewan 2014-04-28
  • 打赏
  • 举报
回复
做法上面那么多大大都给你解答了,我给你提个建议,出入库只做insert,别做update,入库插正数,出库插负数,这是良好的数据库设计,便于日后作账和统计

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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