日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

SQLServer 存儲(chǔ)過程嵌套事務(wù)處理

系統(tǒng) 4971 0
原文: SQLServer 存儲(chǔ)過程嵌套事務(wù)處理

某個(gè)存儲(chǔ)過程可能被單獨(dú)調(diào)用,也可能由其他存儲(chǔ)過程嵌套調(diào)用,則可能會(huì)發(fā)生嵌套事務(wù)的情形。

下面是一種解決存儲(chǔ)過程嵌套調(diào)用的通用代碼,在不能確定存儲(chǔ)過程是否可能被其他存儲(chǔ)過程調(diào)用的情況下,建議每個(gè)存儲(chǔ)過程都按照這個(gè)模板建立

      
        
          create
        
        
          proc
        
        
           proc_example 
        
        
          as
        
        
          begin
        
        
          --
        
        
          聲明變量,存放當(dāng)前已開啟的事務(wù)數(shù)
        
        
          declare
        
        
          @exist_trancount
        
        
          int
        
        
          select
        
        
          @exist_trancount
        
        
          =
        
        
          @@trancount
        
        
          if
        
        
          @exist_trancount
        
        
          >
        
        
          0
        
        
          --
        
        
          創(chuàng)建事務(wù)保存點(diǎn)
        
        
          save
        
        
          transaction
        
        
           tran_proc 
        
        
          else
        
        
          --
        
        
          開啟新事務(wù)
        
        
          begin
        
        
          transaction
        
        
           tran_proc 
        
        
          /*
        
        
           存儲(chǔ)過程業(yè)務(wù)處理代碼 ········· 
        
        
          */
        
        
          if
        
        
          @@error
        
        
          <>
        
        
          0
        
        
          goto
        
        
           error 
        
        
          if
        
        
          @exist_trancount
        
        
          =
        
        
          0
        
        
          --
        
        
          提交事務(wù)
        
        
          commit
        
        
          tran
        
        
           tran_proc 
        
        
          return
        
        
          1
        
        
           error: 
        
        
          --
        
        
          回滾事務(wù)或者事務(wù)保存點(diǎn)
        
        
          rollback
        
        
          transaction
        
        
           tran_proc 
        
        
          return
        
        
          -
        
        
          1
        
        
          end
        
      
    

解釋:

1) 首先判斷當(dāng)前存儲(chǔ)過程實(shí)例執(zhí)行是否是嵌套事務(wù)調(diào)用。如果是嵌套,則存儲(chǔ)過程判斷的@@TRANCOUNT應(yīng)該大于0,此時(shí)創(chuàng)建一個(gè) 事務(wù)保存點(diǎn) ,而非開啟新事務(wù);如果不是嵌套事務(wù),則 @@TRANCOUNT 應(yīng)該為0,此時(shí)開啟新事務(wù)即可

2)然后,是存儲(chǔ)過程本身的業(yè)務(wù)處理代碼,每一步處理代碼需要判斷@@ERROR,如果<>0,執(zhí)行error代碼

3)最后,如果處理正確執(zhí)行,并且非嵌套調(diào)用,則提交事務(wù);如果發(fā)生錯(cuò)誤,則回滾事務(wù)或者回滾保存點(diǎn)。

?

當(dāng)然調(diào)用存儲(chǔ)過程的地方,需要判斷存儲(chǔ)過程的返回值來做相應(yīng)的處理

?

如有不對的地方,歡迎拍磚;如有其他方法,求分享,謝謝!O(∩_∩)O

?

SQLServer 存儲(chǔ)過程嵌套事務(wù)處理


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦?。?!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 龙川县| 南宫市| 印江| 江华| 新郑市| 南投市| 浮山县| 铜梁县| 长寿区| 安仁县| 即墨市| 泰顺县| 永康市| 阿图什市| 潜山县| 宣武区| 巴中市| 绥滨县| 桃江县| 土默特右旗| 蓬莱市| 兴海县| 恩平市| 六枝特区| 无锡市| 休宁县| 浦东新区| 樟树市| 上虞市| 卢湾区| 宁城县| 元氏县| 芷江| 米脂县| 乌什县| 湖口县| 新巴尔虎右旗| 启东市| 时尚| 富锦市| 将乐县|