一个存储过程的问题,在执行时会不会跳语句!
CREATE proc dbo.proc_di_sall --外挂和实物卡销售
@ka_id int, --卡类型的id
@user_id int
as
begin
declare @sall_money money --销售金额
declare @have_money money --当前有多少钱
declare @sall_ka_id int --有销售卡的id
set nocount on
begin transaction
if exists(select 1 from sw_ka_detail where fid=@ka_id and status=0) begin --有卡销售
select @sall_money=(select xsjg from sw_ka_type where id=@ka_id) --取得销售金额
select @have_money=(select money from tuser where fid=@user_id) --取得当前用户的钱数
if @have_money<=@sall_money begin -- 钱不够
select 0 as a1,'钱不够' as a2,'钱不够' as a3
return
end else begin -- 钱够了,开始销售
select @sall_ka_id=(select top 1 id from sw_ka_detail where fid=@ka_id and status=0) --取一条销售的id号码
update tuser set money=money-@sall_money where fid=@user_id --减钱
if(@@error<>0) goto error
update sw_ka_detail set status=1 where id=@sall_ka_id --修改卡的状态
if(@@error<>0) goto error
insert into sw_ka_sall (ka_id,sall_time,sall_money,ka_ren) values(@sall_ka_id,getdate(),@sall_money,@user_id) --添加销售纪录
if(@@error<>0) goto error
select id as a1,ka_name as a2,ka_pass as a3 from sw_ka_detail where id=@sall_ka_id --显示用户名和密码
end
end else begin --无卡销售
select 1 as a1,'无卡销售' as a2 ,'无卡销售' as a3
end
commit transaction
set nocount off
return
end
error:
rollback transaction
raiserror 30001 '出错'
===========================================
高手看看,这个存储过程有没有问题,系统会不会在执行时跳过部分语句的执行!
@ka_id int, --卡类型的id
@user_id int
as
begin
declare @sall_money money --销售金额
declare @have_money money --当前有多少钱
declare @sall_ka_id int --有销售卡的id
set nocount on
begin transaction
if exists(select 1 from sw_ka_detail where fid=@ka_id and status=0) begin --有卡销售
select @sall_money=(select xsjg from sw_ka_type where id=@ka_id) --取得销售金额
select @have_money=(select money from tuser where fid=@user_id) --取得当前用户的钱数
if @have_money<=@sall_money begin -- 钱不够
select 0 as a1,'钱不够' as a2,'钱不够' as a3
return
end else begin -- 钱够了,开始销售
select @sall_ka_id=(select top 1 id from sw_ka_detail where fid=@ka_id and status=0) --取一条销售的id号码
update tuser set money=money-@sall_money where fid=@user_id --减钱
if(@@error<>0) goto error
update sw_ka_detail set status=1 where id=@sall_ka_id --修改卡的状态
if(@@error<>0) goto error
insert into sw_ka_sall (ka_id,sall_time,sall_money,ka_ren) values(@sall_ka_id,getdate(),@sall_money,@user_id) --添加销售纪录
if(@@error<>0) goto error
select id as a1,ka_name as a2,ka_pass as a3 from sw_ka_detail where id=@sall_ka_id --显示用户名和密码
end
end else begin --无卡销售
select 1 as a1,'无卡销售' as a2 ,'无卡销售' as a3
end
commit transaction
set nocount off
return
end
error:
rollback transaction
raiserror 30001 '出错'
===========================================
高手看看,这个存储过程有没有问题,系统会不会在执行时跳过部分语句的执行!
...全文
相关推荐
MySQL存储过程中实现执行动态SQL语句的方法
主要介绍了MySQL存储过程中实现执行动态SQL语句的方法,实例分析了MySQL中构造及执行动态SQL语句的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
MySQL 存储过程中执行动态SQL语句的方法
drop PROCEDURE if exists my_procedure; create PROCEDURE my_procedure() BEGIN declare my_sqll varchar(500); set my_sqll='select * from aa_list'; set @ms=my_sqll; PREPARE s1 from @ms; EXECUTE s1; deallocate prepare s1; end; 您可能感兴趣的文章:mysql 存储过程中变量的定义与赋值操作mysql存储过程详解mysq
mysql 动态执行存储过程语句
MSSQL中动态执行sql语句可以使用EXEC()函数。MSSQL中也有类似的函数EXECUTE(),不过不同的是MYSQL中动态执行存储过程语句与MSSQL还是有区别的。
存储过程中怎么动态执行sql语句
动态的实现表名的动态的配置及动态的配置所对应的列名
mysql存储过程之if语句用法实例详解
主要介绍了mysql存储过程之if语句用法,结合实例形式详细分析了mysql存储过程中if语句相关原理、使用技巧与操作注意事项,需要的朋友可以参考下


疑难问题

