zoukankan      html  css  js  c++  java
  • SQL事务

    如何避免这样的问题呢?有三种方法:

    1. 在事务语句最前面加上set xact_abort on

    1. set xact_abort on   
    2. begin tran   
    3. update statement 1 ...   
    4. update statement 2 ...   
    5. delete statement 3 ...   
    6. commit tran   
    7. go 

    当xact_abort 选项为on 时,SQL Server在遇到错误时会终止执行并rollback 整个事务。

    2. 在每个单独的DML语句执行后,立即判断执行状态,并做相应处理。

    1. begin tran   
    2. update statement 1 ...  
    3. if @@error <> 0   
    4. begin rollback tran   
    5. goto labend   
    6. end   
    7. delete statement 2 ...   
    8. if @@error <> 0  
    9. begin rollback tran   
    10. goto labend   
    11. end   
    12. commit tran   
    13. labend:   
    14. go 

    3. 在SQL Server 2005中,可利用 try...catch 异常处理机制。

    1. begin tran   
    2. begin try   
    3. update statement 1 ...   
    4. delete statement 2 ...   
    5. endtry   
    6. begin catch  
    7. if @@trancount > 0   
    8. rollback tran   
    9. end catch  
    10. if @@trancount > 0   
    11. commit tran  
    12. go 

    下面是个简单的存储过程,演示事务处理过程。

    1. create procedure dbo.pr_tran_inproc as begin set nocount on   
    2. begin tran  
    3. update statement 1 ...   
    4. if @@error <> 0   
    5. begin rollback tran   
    6. return -1 end   
    7. delete statement 2 ...   
    8. if @@error <> 0   
    9. begin rollback tran   
    10. return -1   
    11. end commit tran   
    12. return 0   
    13. end   
    14. go  

    关于SQL Server数据库中在存储过程中编写正确的事务处理代码的方法就介绍到这里了,希望本次的介绍能够对您有所帮助。

  • 相关阅读:
    「SHOI2015」脑洞治疗仪
    LOJ 数列分块入门 8
    CF932F Escape Through Leaf
    NOIP2021游记总结
    [HEOI2016/TJOI2016]序列
    【模板】动态树(Link Cut Tree)
    LG P2839 [国家集训队]middle
    JZOJ 7377.欢乐豆
    JZOJ 7392. 【2021.11.17NOIP提高组联考】数 (ds)
    LOJ 数列分块入门 6
  • 原文地址:https://www.cnblogs.com/mingdep/p/2501229.html
Copyright © 2011-2022 走看看