设为首页 收藏本站
查看: 862|回复: 0

[经验分享] 一个云端充值的Sql Server存储过程示例

[复制链接]

尚未签到

发表于 2018-10-14 11:01:31 | 显示全部楼层 |阅读模式
  USE [CASH]
  GO
  SET ANSI_NULLS ON
  GO
  SET QUOTED_IDENTIFIER ON
  GO
  CREATE PROC [dbo].[pr_addMoney]
  @Cash money, --充值金额
  @CardIDH varchar(16) , --需要充值的卡号
  @AccExist int OUTPUT, --用户存在或不存在标记
  @LogID int OUTPUT   --充值成功的tb_OperLog记录LogID
  AS
  BEGIN
  DECLARE @ERROR INT  --定义
  SET @ERROR=0    --事务回滚判断条件:错误计数
  SET XACT_ABORT ON
  BEGIN TRAN tran_addMoney --开始事务
  IF exists
  (SELECT AccountNo
  FROM [CASH].[dbo].[tb_Customer]
  WHERE CardIDH=@CardIDH) --判断用户是否存在,并且印刷卡号和物理卡号一致
  --WHERE CardIDH=@CardIDH AND CardIDH=CardID) --测试卡号的发卡卡号和物理卡号不一致,临时注释掉
  BEGIN
  SET @AccExist =1    --存在标记1
  --局部变量
  DECLARE
  @AccountNo int, --用户编号
  @CustomerName varchar(32), --用户名
  @deptNo varchar(12),    --班级号
  @ClassNo tinyint,   --人员类别
  @LeftMoney  money,  --原余额
  @ConsumeNo int, --序号
  @ConsumeNoC int,    --卡操作序号
  @CardLeftMoney money,   --卡中余额
  @ExChgDate datetime,    --充值日期
  @TempID int, --临时ID值
  @TempAcc int --临时账户值
  SET @ExChgDate=convert(datetime,convert(char(10),GetDate(),120), 20); --为一个特殊格式的字段赋初值
  --查询出充值人名字
  SELECT  @AccountNo=AccountNo,
  @CustomerName=CustomerName,
  @deptNo=DeptNo,
  @ClassNo=ClassNo,
  @LeftMoney=LeftMoney,
  @ConsumeNo=ConsumeNo,
  @ConsumeNoC=ConsumeNoC,
  @CardLeftMoney=CardLeftMoney
  FROM [CASH].[dbo].[tb_Customer]
  WHERE CardIDH=@CardIDH;
  BEGIN
  SELECT @TempID=MAX(LogID) FROM [CASH].[dbo].[tb_OperLog]; --查询添加充值记录前最大LOGID
  --在tb_OperLog添加充值明细
  INSERT INTO [CASH].[dbo].[tb_OperLog]
  (EDate,OperatorNo,AccountNo,CustomerName,deptNo,ClassNo,Times,AccCount,OldLeftMoney,LeftMoney,AccLeftMoney,GLF,YJ,CardFee,Cash,ItemNo,ConsumeNo,ConsumeNoC,CardLeftMoney,LocaAreaNo,OperAreaNo,ExChgDate)
  VALUES
  (GETDATE(),100,@AccountNo,@CustomerName,@deptNo,@ClassNo,1,0,@LeftMoney,@LeftMoney+@Cash,@Cash,0,0,0,0,11,@ConsumeNo+1,@ConsumeNoC,@CardLeftMoney,1,1,@ExChgDate);
  SELECT @LogID=MAX(LogID)
  FROM [CASH].[dbo].[tb_OperLog]; --查询添加充值记录后最大LOGID
  SELECT @TempAcc=AccountNo
  FROM [CASH].[dbo].[tb_OperLog]
  WHERE LogID=@LogID; --查询添加充值记录后最大LOGID所对应的用户账号
  IF ( (@LogID>@TempID) AND (@TempAcc=@AccountNo) )   --添加记录成功后再执行充值操作
  BEGIN
  PRINT '在tb_OperLog添加充值明细成功@LogID是'+CAST(@LogID as nvarchar(10));
  --tb_Customer表充值(先添加充值记录成功,后执行充值操作)
  UPDATE [CASH].[dbo].[tb_Customer]
  SET LeftMoney=LeftMoney+@Cash,
  DepositSum=DepositSum+@Cash,
  ConsumeNo=ConsumeNo+1,
  UnInformedMoney=UnInformedMoney+@Cash
  WHERE CardIDH=@CardIDH;
  END
  ELSE
  BEGIN
  PRINT '在tb_OperLog添加充值明细失败,充值失败,请查明原因';
  SET @ERROR=@ERROR+1
  END
  END
  END
  ELSE
  BEGIN
  SET @AccExist=0 --不存在标记0
  PRINT '查无此人,或账户异常,充值失败';
  SET @ERROR=@ERROR+1
  END
  SET @ERROR=@ERROR+@@ERROR   --系统报错和逻辑报错累加
  IF @ERROR0
  BEGIN
  ROLLBACK TRAN;
  PRINT '充值失败,@@ERROR是:'+cast(@@ERROR as nvarchar(10))
  END
  ELSE
  BEGIN
  COMMIT TRAN;
  PRINT '账户为'+cast(@AccountNo as nvarchar(8))+'的'+@CustomerName+'充值'+cast(@Cash as nvarchar(7))+'成功'  --打印充值成功信息
  END
  END
  **


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-621415-1-1.html 上篇帖子: Java连接SQL2008R2 下篇帖子: Sql server 删除重复记录的SQL语句
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表