日期:2014-05-16  浏览次数:20632 次

关于入库的触发器或存储过程。
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为商品规格。
------解决方案--------------------
你入库单据程序插入数据时只插入数据,然后做一个过程来处理,单据流程增加一个审核,审核时调用过程
------解决方案--------------------
按先更新后插入的原则进行.

-- 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)

------解决方案--------------------
做法上面那么多大大都给你解答了,我给你提个建议,出入库只做insert,别做update,入库插正数,出库插负数,这是良好的数据库设计,便于日后作账和统计
------解决方案--------------------
引用:
做法上面那么多大大都给你解答了,我给你提个建议,出入库只做insert,别做update,入库插正数,出库插负数,这是良好的数据库设计,便于日后作账和统计

如果数据多这个做法就会造成效率低下,库存单独设计一个表,通过业务单据变化来更新库存表,否则要取库存就会很慢了