每日一学:存储过程,返回多个参数。
--表数据--drop table shoppe_kc
--go
--create table shoppe_kc(sp_bh varchar(6),sp_mc varchar(30),sp_dw varchar(4),sp_gg varchar(30),sp_jj numeric(9,2),sp_cb numeric(9,2),
--sp_sl int, sp_ud datetime,sp_bz varchar(80))
--go
--drop table shoppe_rk
--go
--create table shoppe_rk(sp_bh varchar(6),sp_mc varchar(30),sp_dw varchar(4),sp_gg varchar(30),sp_jj numeric(9,2),sp_cb numeric(9,2),
--sp_sl int, sp_rksl int,sp_rd datetime,sp_bz varchar(80),sp_yy varchar(12),sp_cz varchar(16),sp_gys varchar(30))
--go
--调用
exec shoppe_kc_update @bh,@jj,@sl,@gys,@yy,@cz,@ud,@bz,@kc_cb output,@kc_sl output,@kc_rs output
--建立存储过程
create procedure shoppe_kc_update
@bh varchar(6),@jj numeric(9,2),@sl int,@gys varchar(30),@yy varchar(12),@cz varchar(16),@ud datetime,@bz varchar(80),
@kc_cb numeric(9,2) output,@kc_sl int output,@kc_rs int output
as
begin
declare @kc_mc varchar(30),@kc_gg varchar(30),@kc_dw varchar(4),@res int
begin transaction
update shoppe_kc set sp_cb=(sp_cb*sp_sl+@jj*@sl)/(sp_sl+@sl),sp_sl=sp_sl+@sl,sp_jj=@jj where sp_bh=@bh
set @res=@@rowcount --更新库存数据
if @res > 0
begin
select @kc_mc=sp_mc,@kc_dw=sp_dw,@kc_gg=sp_gg,@kc_cb=sp_cb,@kc_sl=sp_sl from shoppe_kc where sp_bh=@bh
set @res=@@rowcount --读取库存数据
if @res > 0
begin
insert into shoppe_rk(sp_bh,sp_mc,sp_dw,sp_gg,sp_jj,sp_cb,sp_sl,sp_rksl,sp_rd,sp_bz,sp_yy,sp_cz,sp_gys)
values(@bh,@kc_mc,@kc_dw,@kc_gg,@jj,@kc_cb,@kc_sl,@sl,@ud,@bz,@yy,@cz,@gys)
set @res=@@rowcount --增加入库记录
if @res <= 0
set @kc_rs = -3 --增加入库失败
else
set @kc_rs = @res
end
else
set @kc_rs = -2 --读取库存失败
end
else
begin
set @kc_rs = -1 --更新库存失败
set @kc_cb = 0.0
set @kc_sl = 0
end
if @kc_rs >0
commit
else
rollback transaction
end