繁体   English   中英

EXECUTE之后的事务计数表示缺少COMMIT或ROLLBACK TRANSACTION语句 - SQL server 2005

[英]Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing - SQL server 2005

我从SQL Server 2005获取应用程序中的错误

“EXECUTE之后的事务计数表示缺少COMMIT或ROLLBACK TRANSACTION语句。先前计数= 1,当前计数= 0”

如何找到引发此错误的阶段?

如何找到丢失的事务或未提交或回滚的存储过程?

我认为没有什么遗漏。 它可能是一个内部存储过程,从事务内部调用(TRANCOUNT = 1),启动自己的事务(TRANCOUNT = 2),然后回滚它。 好吧,这意味着将其回滚,但回滚会影响所有事务,而不仅影响最内层的事务,因此该过程会破坏执行流程。

找到这个地方的方法取决于可用的工具/技能。 更好的方法是使用SQL事件探查器显示应用程序针对服务器执行的所有命令。 找出最外层的存储过程并查看其代码以查找任何其他过程调用。

系统函数@@TRANCOUNT将返回您当前所处的交易数量。作为调查的一部分,在适当的位置插入PRINT @@TRANCOUNTSELECT @@TRANCOUNT语句以查看出现了什么问题。

COMMIT TRANROLLBACK TRAN之前检查是否有返回命令。 这是常见错误,因为Return命令结束过程并且没有机会进行COMMIT

这通常意味着你有嵌套的事务,并且有一个ROLLBACK。 你真的没有提供有关代码运行,存储过程,动态SQL等的任何信息。所以这只是一个猜测,但我会搜索“ROLLBACK”并在每个之后添加PRINT或INSERT INTO YourErrorLogTable,make确保内容足够独特,以确定ROLLBACK被击中的内容。 您可以尝试的另一件事是添加一些TRY - CATCH块,其中您在CATCH中包含PRINT或INTO YourErrorLogTable。 如果你提供有关被调用代码的更多细节(嵌套过程,你使用try-catch块,动态sql,linq等),我可以给你更具体的建议如何找到问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM