if exists(select name from sysobjects where name='mdcprk'and type='p') drop procedure mdcprk go create procedure mdcprk @xsmd varchar(50),--销售门店名称(调入仓库) @bmbm varchar(50),--销售门店代码(调入仓库代码) @dcck varchar(50),--调出仓库名称 @dcckbm varchar(50),--调出仓库代码 @danh varchar(50),--单号 @jbr varchar(50),--经办人 @kdsj varchar(50)--开单时间 as begin declare @goods_count int--配送出库产品种类(总行数) declare @sptm varchar(50)--商品条码 declare @spmc varchar(50)--商品名称 declare @kucun_count int--库存数量 declare @ps_count int --配送单某条码的数量 declare @ps_number int--配送明细单序号 set @ps_number=0--配送明细单序号,初始为0
select @goods_count=count(*) from SJZL_ERP_CPPHCKMX where danh=@danh--获取配送单商品种类数量
while (@ps_number<@goods_count) begin set @ps_number=@ps_number+1--配送明细单序号自增一 print @ps_number select @spmc=spmc,@sptm=sptm,@ps_count=shul from (select RANK() OVER (ORDER BY cpphckmxid asc) AS id,danh,spmc,sptm,shul,jine,re from SJZL_ERP_CPPHCKMX where danh=@danh)as ll where id=@ps_number--获取某条配送明细单的商品名称,商品条码,数量 select @kucun_count=count(*) from SJZL_ERP_MD_SPFCKC where sptm=@sptm and ckbm=@bmbm print @kucun_count if (@kucun_count>0) begin print'更新' update SJZL_ERP_MD_SPFCKC set SJZL_ERP_MD_SPFCKC.shul=(SJZL_ERP_MD_SPFCKC.shul+SJZL_ERP_CPPHCKMX.shul),SJZL_ERP_MD_SPFCKC.zhbgsj=getdate()from SJZL_ERP_CPPHCKMX where SJZL_ERP_CPPHCKMX.sptm=SJZL_ERP_MD_SPFCKC.sptm and SJZL_ERP_CPPHCKMX.danh=@danh and SJZL_ERP_MD_SPFCKC.ckbm=@bmbm and SJZL_ERP_CPPHCKMX.sptm=@sptm --如果库存存在该商品,直接累加数量 end else begin print'插入' insert SJZL_ERP_MD_SPFCKC (ckmc,ckbm,spmc,sptm,shul,zhbgsj)values(@xsmd,@bmbm,@spmc,@sptm,@ps_count,getdate())--如果库存不存在该商品,直接插入 end print @ps_number end end
drop procedure mdcprk
go
create procedure mdcprk
@xsmd varchar(50),--销售门店名称(调入仓库)
@bmbm varchar(50),--销售门店代码(调入仓库代码)
@dcck varchar(50),--调出仓库名称
@dcckbm varchar(50),--调出仓库代码
@danh varchar(50),--单号
@jbr varchar(50),--经办人
@kdsj varchar(50)--开单时间
as
begin
declare @goods_count int--配送出库产品种类(总行数)
declare @sptm varchar(50)--商品条码
declare @spmc varchar(50)--商品名称
declare @kucun_count int--库存数量
declare @ps_count int --配送单某条码的数量
declare @ps_number int--配送明细单序号
set @ps_number=0--配送明细单序号,初始为0
select @goods_count=count(*) from SJZL_ERP_CPPHCKMX where danh=@danh--获取配送单商品种类数量
while (@ps_number<@goods_count)
begin
set @ps_number=@ps_number+1--配送明细单序号自增一
print @ps_number
select @spmc=spmc,@sptm=sptm,@ps_count=shul from (select RANK() OVER (ORDER BY cpphckmxid asc) AS id,danh,spmc,sptm,shul,jine,re from SJZL_ERP_CPPHCKMX where danh=@danh)as ll where id=@ps_number--获取某条配送明细单的商品名称,商品条码,数量
select @kucun_count=count(*) from SJZL_ERP_MD_SPFCKC where sptm=@sptm and ckbm=@bmbm
print @kucun_count
if (@kucun_count>0)
begin
print'更新'
update SJZL_ERP_MD_SPFCKC set SJZL_ERP_MD_SPFCKC.shul=(SJZL_ERP_MD_SPFCKC.shul+SJZL_ERP_CPPHCKMX.shul),SJZL_ERP_MD_SPFCKC.zhbgsj=getdate()from SJZL_ERP_CPPHCKMX where SJZL_ERP_CPPHCKMX.sptm=SJZL_ERP_MD_SPFCKC.sptm and SJZL_ERP_CPPHCKMX.danh=@danh and SJZL_ERP_MD_SPFCKC.ckbm=@bmbm and SJZL_ERP_CPPHCKMX.sptm=@sptm --如果库存存在该商品,直接累加数量
end
else
begin
print'插入'
insert SJZL_ERP_MD_SPFCKC (ckmc,ckbm,spmc,sptm,shul,zhbgsj)values(@xsmd,@bmbm,@spmc,@sptm,@ps_count,getdate())--如果库存不存在该商品,直接插入
end
print @ps_number
end
end
所以我在if (@kucun_count>0)这里少了一个begin end,while (@ps_number<@goods_count)这里也少了一个,但是少了的话,那为什么 【set @ps_number=@ps_number+1--配送明细单序号自增一】这一步能循环够七次,而下面更新和插入加起来的不够呢?
上面你没有加事务它不会回滚的.
只有加事务begin tran,然后要么提交commit tran ,要么回滚rollback tran
什么判断错误呢?
每当你执行insert或update或delete后,用if @@error<>0来判断是否有错误,有错误就不等于0大概格式如下:
create proc proc_name
as
....
begin tran
insert into tb(.....)
values(.....)
if @@error<>0
goto errHandle
....
commit tran
returnerrHandle:
rollback trango