[转]一个按批资冲减库存的存储过程模型

转自:资深菜鸟

昨天应朋友之邀写了一个存储过程.贴在这里,有需要的朋友可以看一下. 
'模型',故名思义,纯理论性的,根据实际情况改造后可以使用. 

     
//如果数据库中存在此对象则删除 
if exists(select id from sysobjects where id=object_id('销售记帐')) 
drop procedure 销售记帐; 

     
//创建销售记帐存储过程 
create procedure 销售记帐( 
@销售单号       char(12)             //在审核单据时调用此存储过程,参数据销售单号 
)
as 

     
//定义变理 
declare @商品编码 char(7), 
  
@销售数量 decimal(16,4), 
 
@仓库编码 varchar(4), 
        
@商品库存批次   varchar(12), 
        
@未记账数量     decimal(16,4), 
        
@库存数量       decimal(16,4

     
//定义游标,查询本单上的所有商品信息 
set cursor_close_on_commit off 

declare cur_goods cursor for 
select 主表.仓库编码,    //销售出库的仓库 
       从表.商品编码,          
//商品编码 
       从表.销售数量           
//销售数量 
from   主表,                      //主表 
       从表                      
//从表 
where  主表.销售单号 = 从表.销售单号 and 
       主表.销售单号 
= @销售单号  
     

     
//打开游标 
open cur_goods 
fetch cur_goods into @仓库编码,@商品编码,@销售数量  
while @@fetch_status = 0 
begin 
 
begin transaction 

 
select @未记账数量 = @销售数量

 
if @销售数量>0 
  
declare cur_storage cursor for 
  
select 库存批次,库存数量 
    
from 库存表 
   
where 仓库编码 =@仓库编码 and 
                       商品编码
=@商品编码 and 
                       库存数量
>0      //只取库存大于0的批次 

 
open cur_storage 
 
fetch cur_storage into @商品库存批次,@库存数量 
 
while @@fetch_status = 0 and @未记账数量<>0 
 
begin   
  
if @库存数量 >= @未记账数量 
  
begin 
   
update 库存表 
          
set 库存数量 = 库存数量-@未记账数量 
    
where 仓库编码 =@仓库编码 and 
                        商品编码
=@商品编码 
   
if @@error != 0 
   
begin 
    
rollback transaction 
    
break 
   
end 

   
select @未记账数量 = @销售数量 
  
end 
  
else 
    
begin 
                        
select @未记账数量 = @未记账数量-@库存数量 
   
update 库存表 
          
set 库存数量 = 库存数量-@未记账数量 
    
where 仓库编码 =@仓库编码 and 
                        商品编码
=@商品编码 
   
if @@error != 0 
   
begin 
    
rollback transaction 
    
break 
   
end 
    
end 
               
fetch cur_storage into @商品库存批次,@库存数量 
 
end 
        
close cur_storage 
 
deallocate cur_storage 
end 
close cur_goods 
deallocate cur_goods 
return 0

posted @ 2006-04-21 11:44  李振波  阅读(493)  评论(0编辑  收藏  举报