我有一個帶有事務的 TRY/CATCH 塊,我想根據執行存盤程序的結果回滾該事務。
BEGIN TRY
BEGIN TRAN
INSERT Record
--Business validation
EXEC StoredProcedure --This should throw error
PRINT 'Commit Tran'
COMMIT TRAN
END TRY
BEGIN CATCH
PRINT 'In CATCH Block'
ROLLBACK TRAN;
END CATCH
PRINT 'After END CATCH'
在我的測驗中,提交了 INSERT 記錄,存盤程序按預期失敗,未列印 PRINT 'COMMIT Tran',并且代碼被發送到 CATCH 塊并出現以下錯誤: "The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION."
如果我將 EXEC StoredProcedure 替換為設計為失敗的 INSERT,則原始 INSERT 不會提交,并且 CATCH 塊中的 ROLLBACK 正常運行且沒有錯誤。
所以問題是 EXEC StoredProcedure 如何影響交易,我該如何解決這個問題?
uj5u.com熱心網友回復:
您StoredProcedure正在結束交易,無論是顯式還是隱式。也許它正在呼叫一些確實有提交的其他程序,或者它可能正在某處執行直接的“提交”
這是使用您的示例的演示,它不會隱式/顯式https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=1d02ee0255aa6c7131dd7e300704bab5
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/362292.html
標籤:sql-server 查询语句
上一篇:使用索引的JOIN查詢優化
