当前位置:Gxlcms > mssql > 实用的银行转账存储过程和流水号生成存储过程

实用的银行转账存储过程和流水号生成存储过程

时间:2021-07-01 10:21:17 帮助过:73人阅读

银行转账存储过程

  1. USE [BankInfor]
  2. GO
  3. SET ANSI_NULLS ON
  4. GO
  5. SET QUOTED_IDENTIFIER ON
  6. GO
  7. ALTER PROCEDURE [dbo].[Transfer](@inAccount int,@outAccount int,@amount float)
  8. as declare
  9. @totalDeposit float;
  10. begin
  11. select @totalDeposit=total from Account where AccountNum=@outAccount;
  12. if @totalDeposit is null
  13. begin
  14. rollback;
  15. print'转出账户不存在或账户中没有存款'
  16. return;
  17. end
  18. if @totalDeposit<@amount
  19. begin
  20. rollback;
  21. print'余额不足,不能操作'
  22. return;
  23. end
  24. update Account set total=total-@amount where AccountNum=@outAccount;
  25. update Account set total=total+@amount where AccountNum=@inAccount;
  26. print'转账成功!'
  27. commit;
  28. end;

流水号生成存储过程

  1. if exists(select 1 from sysobjects where id=OBJECT_ID('GetSerialNo') and xtype='p')
  2. drop proc GetSerialNo
  3. go
  4. Create procedure [dbo].[GetSerialNo]
  5. (
  6. @sCode varchar(50)
  7. )
  8. as
  9. begin
  10. Declare @sValue varchar(16),@dToday datetime,@sQZ varchar(50) --这个代表前缀
  11. Begin Tran
  12. Begin Try
  13. -- 锁定该条记录,好多人用lock去锁,起始这里只要执行一句update就可以了
  14. --在同一个事物中,执行了update语句之后就会启动锁
  15. Update SerialNo set sValue=sValue where sCode=@sCode
  16. Select @sValue = sValue From SerialNo where sCode=@sCode
  17. Select @sQZ = sQZ From SerialNo where sCode=@sCode
  18. -- 因子表中没有记录,插入初始值
  19. If @sValue is null
  20. Begin
  21. Select @sValue = convert(bigint, convert(varchar(6), getdate(), 12) + '000001')
  22. Update SerialNo set sValue=@sValue where sCode=@sCode
  23. end else
  24. Begin --因子表中没有记录
  25. Select @dToday = substring(@sValue,1,6)
  26. --如果日期相等,则加1
  27. If @dToday = convert(varchar(6), getdate(), 12)
  28. Select @sValue = convert(varchar(16), (convert(bigint, @sValue) + 1))
  29. else --如果日期不相等,则先赋值日期,流水号从1开始
  30. Select @sValue = convert(bigint, convert(varchar(6), getdate(), 12) +'000001')
  31. Update SerialNo set sValue =@sValue where sCode=@sCode
  32. End
  33. Select result = @sQZ+@sValue
  34. Commit Tran
  35. End Try
  36. Begin Catch
  37. Rollback Tran
  38. Select result = 'Error'
  39. End Catch
  40. end
  41. select*from SerialNo
  42. select convert(varchar(6), getdate(), 12)+'000001'

您可能感兴趣的文章:

  • Android 高仿微信转账金钱输入框规则
  • python 实现网上商城,转账,存取款等功能的信用卡系统
  • Python实现信用卡系统(支持购物、转账、存取钱)
  • Python3连接MySQL(pymysql)模拟转账实现代码
  • 基于Python实现一个简单的银行转账操作
  • PHP+Mysql基于事务处理实现转账功能的方法
  • php利用事务处理转账问题
  • php+Mysqli利用事务处理转账问题实例
  • php+mysqli事务控制实现银行转账实例
  • 转账支票、现金支票日期大写对照表(数字大写)
  • 微信开发--企业转账到用户

人气教程排行