Sql-Server

處理“EXECUTE 後的事務計數表明 BEGIN 和 COMMIT 語句的數量不匹配”

  • February 1, 2019

我們的系統突然開始出現故障:

EXECUTE 之後的事務計數表明 BEGIN 和 COMMIT 語句的數量不匹配。

沒有服務包或其他安裝更改,數據本質上沒有更改。

這是一個遺留系統,沒有包含嵌套儲存過程和触發器的文件,其中一些具有 XACT_ABORT ON 和 IF @@TRANCOUNT > 0 ROLLBACK。

為了進行臨時修復,我想忽略該錯誤並繼續執行該過程,但 CATCH 沒有發現它。

有什麼辦法可以捕捉和處理這個錯誤嗎?寫得不好的嵌套事務是否有任何理由開始表現不同?我們已檢查連接預設值未更改。

Microsoft SQL Server 2012 - 11.0.5343.0 (X64) Standard Edition (64-bit) o​​n Windows NT 6.3 (Build 9600:) (Hypervisor)

有什麼辦法可以捕捉和處理這個錯誤嗎?

不,這不是你的問題。您還有其他一些錯誤,並且您的儲存過程被編碼為在錯誤時回滾。在未啟動事務的儲存過程中執行 ROLLBACK也是一個錯誤,並且會生成此消息。

您需要查看前面的錯誤。在 ROLLBACK 之前,該過程應該呼叫 RAISERROR 或 THROW 以將基礎錯誤詳細資訊返回給客戶端。在 SSMS 中,您會看到兩條錯誤消息,在 Visual Studio 調試中,SqlException 具有您可以詢問的錯誤集合。但其他客戶端有時只顯示最後一條錯誤消息。

如果不是,它應該。您也可以使用 Profiler 來查看它,使用“錯誤和警告”/“使用者錯誤消息事件”或類似的 XEvent。

引用自:https://dba.stackexchange.com/questions/212115