gpt4 book ai didi

SQLException - 事务开始/提交不匹配

转载 作者:行者123 更新时间:2023-12-04 13:06:28 25 4
gpt4 key购买 nike

对于确实具有平衡事务块的存储过程,您是否遇到过这种异常?

我仔细检查了存储过程,它正好有一个 TRANSACTION BEGIN和对应TRANSACTION END
错误记录

SqlException - Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 1, current count = 0.  The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION. - Delete failed - stack:    at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)     at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)     at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)     at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)     at System.Data.SqlClient.S ... [Rest of stack trace truncated by logging system]`

附加信息

存储过程确实包含 EXEC调用另一个存储过程。这里不匹配的交易对会导致错误以这种方式浮出水面吗?

更新
事实证明,嵌套存储过程中存在违反外键约束的情况。外部事务不包含 Try/Catch 块,并且具有 SET XACT_ABORT ON指定,它没有正确处理提交或回滚。在尝试回滚之前还添加了对 @@TransactionCount > 0 的检查

最佳答案

是的。每个 BEGIN 递增 @@trancount ,每次提交都会减少它。只有当计数变为 0 时才真正提交事务。作为调用者,您的过程无法控制这一点。被调用过程的工作是正确运行并平衡 BEGIN 和 COMMIT 计数,如果任何被调用过程不平衡,您将看到此错误。

关于SQLException - 事务开始/提交不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3728869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com