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

时间:2010-02-15 11:42:41

标签: sql sql-server sql-server-2005 tsql

我从应用程序收到错误,如下面的SQL Server 2005

  

“执行后的交易计数   表示COMMIT或ROLLBACK   缺少TRANSACTION语句。   先前的计数= 1,当前计数=   0"

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

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

4 个答案:

答案 0 :(得分:15)

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

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

答案 1 :(得分:3)

系统函数@@TRANCOUNT将返回您当前所处的交易次数。作为调查的一部分,请在适当的位置插入PRINT @@TRANCOUNTSELECT @@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 TRANROLLBACK TRAN之前是否有返回命令。这是常见的错误,因为Return命令结束了程序,并且没有机会COMMIT它。