首页 > 数据库 > SQL Server > 正文

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

2024-08-31 01:03:15
字体:
来源:转载
供稿:网友

本篇文章给大家分享银行转账存储过程和流水号生成存储过程,感兴趣的朋友一起看看吧

银行转账存储过程

 

 
  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' 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表