SQL Server 當前事務無法提交,而且無法支持寫入日志文件的操作。


  最近遇到一個向表插入數據時,拋出 “當前事務無法提交,而且無法支持寫入日志文件的操作。”的異常, 詳細如下;

     此操作只是一個簡單的insert操作, 經過排查原因是此表上有對應insert觸發器。原因是 里面對應寫有try catch,並且將設置了SET XACT_ABORT ON;

    我們知道觸發器本事就是一個事務,SET XACT_ABORT ON代表的意思是 程序如果遇到錯誤就回滾。如果在程序中沒有try catch的情況下 就直接回滾了。但是如果有try catch的話,在  try塊中出現了錯誤,被catch捕獲以后。Xact_state()就會變成-1 。

    Xact_state()是一個系統函數     

         0表示沒有活動事務

         1表示有活動事務並且可以提交

         -1表示有活動事務

    當Xact_state()=-1時存在活動事務,但是無法提交,換句話說就是只能rollback。所以在你提交的時候就會報錯“當前事務無法提交,而且無法支持寫入日志文件的操作。請回滾該事務。”     

解決:

       1、 在catch中對Xact_state()的值進行判斷如果為-1的話 直接rollback     

       2、 如果在子存儲過程中存在try catch的話 最好去掉 讓錯誤往上一級拋出,由上一級做處理

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM