我从应用程序收到错误,如下面的SQL Server 2005
“执行后的交易计数 表示COMMIT或ROLLBACK 缺少TRANSACTION语句。 先前的计数= 1,当前计数= 0"
如何找到引发此错误的阶段?
如何找到丢失的事务或未提交或回滚的存储过程?
答案 0 :(得分:15)
我认为没有遗漏任何东西。它可能是一个内部存储过程,从事务内部调用(TRANCOUNT = 1),启动自己的事务(TRANCOUNT = 2),然后回滚它。好吧,这意味着将其回滚,但回滚会影响所有事务,而不仅影响最内层的事务,因此该过程会破坏执行流程。
找到地方的方法取决于可用的工具/技能。更好的方法是使用SQL事件探查器显示应用程序针对服务器执行的所有命令。找出最外层的存储过程,并查看其代码以查找任何其他过程调用。
答案 1 :(得分:3)
系统函数@@TRANCOUNT
将返回您当前所处的交易次数。作为调查的一部分,请在适当的位置插入PRINT @@TRANCOUNT
或SELECT @@TRANCOUNT
语句,以查看出现了什么问题。
答案 2 :(得分:1)
通常意味着你有嵌套的事务并且有一个ROLLBACK。你真的没有提供有关代码运行,存储过程,动态SQL等的任何信息。所以这只是一个猜测,但我会搜索“ROLLBACK”并在每个之后添加PRINT或INSERT INTO YourErrorLogTable,make确保内容足够独特,以确定ROLLBACK被击中的内容。您可以尝试的另一件事是添加一些TRY - CATCH块,其中您在CATCH中包含PRINT或INTO YourErrorLogTable。如果你提供有关被调用代码的更多细节(嵌套过程,你使用try-catch块,动态sql,linq等),我可以给你更具体的建议如何找到问题。
答案 3 :(得分:1)
检查COMMIT TRAN
或ROLLBACK TRAN
之前是否有返回命令。这是常见的错误,因为Return命令结束了程序,并且没有机会COMMIT
它。