SQL SERVER中事务处理

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_42547106/article/details/88061967

 

一、语法


 
 
  1. --创建事务
  2. BEGIN TRAN
  3. --事务标签
  4. SAVE TRAN [TranName]
  5. --提交事务
  6. COMMIT TRAN
  7. --回滚事务
  8. ROLLBACK TRAN
  9. --事务计数
  10. DECLARE @sTranCount INT
  11. SET @sTranCount=@@TRANCOUNT

二、常见用法

1、单事务


 
 
  1. --事务计数
  2. DECLARE @sTranCount INT
  3. SET @sTranCount=@@TRANCOUNT --此时为 0
  4. --监测异常
  5. BEGIN TRY
  6. --创建事务
  7. BEGIN TRAN --此时 @@TRANCOUNT为 1
  8. /*此处实现业务处理-下*/
  9. SELECT 1
  10. /*
  11. --主动抛出异常
  12. RAISERROR('抛出异常说明',16,1)
  13. --主动回滚
  14. ROLLBACK TRAN
  15. */
  16. /*此处实现业务处理-上*/
  17. --提交事务
  18. COMMIT TRAN --此时 @@TRANCOUNT为 0
  19. END TRY
  20. BEGIN CATCH
  21. --存在事务则回滚
  22. IF @@TRANCOUNT > @sTRANCOUNT
  23. BEGIN
  24. --回滚事务
  25. ROLLBACK TRAN --此时 @@TRANCOUNT为 0
  26. END
  27. END CATCH

2.嵌套事物-不存在SAVE TRAN


 
 
  1. --事务计数
  2. DECLARE @sTranCount INT
  3. SET @sTranCount=@@TRANCOUNT --此时为 0
  4. --监测异常
  5. BEGIN TRY
  6. --创建事务
  7. BEGIN TRAN Tran1 --此时 @@TRANCOUNT为 1
  8. --创建事务
  9. BEGIN TRAN Tran2 --此时 @@TRANCOUNT为 2
  10. --提交事务
  11. COMMIT TRAN Tran2 --此时 @@TRANCOUNT为 1
  12. --提交事务
  13. COMMIT TRAN Tran1 --此时 @@TRANCOUNT为 0
  14. END TRY
  15. BEGIN CATCH
  16. --存在事务则回滚
  17. IF @@TRANCOUNT > @sTRANCOUNT
  18. BEGIN
  19. --回滚事务
  20. ROLLBACK TRAN --此时 @@TRANCOUNT为 0
  21. END
  22. SELECT 1
  23. END CATCH
  24. /*****注意******
  25. 1.ROLLBACK TRAN 事务回滚,会将事务全部回滚(不存在 SAVE TRAN),即回滚后@@TRANCOUNT=0
  26. 2.只有最外层的COMMIT TRAN 提交,数据库才会永久更改
  27. ****************/

3.嵌套事务-存在SAVE TRAN


 
 
  1. --事务计数
  2. DECLARE @sTranCount INT
  3. SET @sTranCount=@@TRANCOUNT --此时为 0
  4. --监测异常
  5. BEGIN TRY
  6. --创建事务
  7. BEGIN TRAN --此时 @@TRANCOUNT为 1
  8. --创建事务
  9. SAVE TRAN SaveTran1 --此时 @@TRANCOUNT为 2
  10. --回滚到上次保存点
  11. ROLLBACK TRAN SaveTran1 --此时 @@TRANCOUNT为 2
  12. SELECT 1
  13. --提交事务
  14. COMMIT TRAN --此时 @@TRANCOUNT为 0
  15. END TRY
  16. BEGIN CATCH
  17. --存在事务则回滚
  18. IF @@TRANCOUNT > @sTRANCOUNT
  19. BEGIN
  20. --回滚事务
  21. ROLLBACK TRAN --此时 @@TRANCOUNT为 0
  22. END
  23. SELECT 1
  24. END CATCH
  25. /*****注意******
  26. 1.ROLLBACK TRAN [保存点] 事务回滚,会将事务回滚到上一次保存点,但回滚后@@TRANCOUNT依旧不变
  27. 2.只有最外层的COMMIT TRAN 提交,数据库才会永久更改
  28. ****************/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值