提交和回滚在存储过程中不起作用

时间:2013-02-21 22:39:24

标签: sql stored-procedures sql-server-2008-r2

我从Click Here

发布的问题中得到了我的一个问题的答案

我得到了这个解决方案

BEGIN TRY
BEGIN TRANSACTION 
    exec( @sqlHeader)
    exec(@sqlTotals)
    exec(@sqlLine)
COMMIT
 END TRY
 BEGIN CATCH

IF @@TRANCOUNT > 1
    ROLLBACK
 END CATCH

在获得解决方案后,我遇到了一个新问题,即存储过程执行时第一次正常工作,之后发出以下错误

  

EXECUTE之后的事务计数表示BEGIN和COMMIT语句的数量不匹配。先前的计数= 1,当前计数= 0.

我需要你的帮助。

由于

1 个答案:

答案 0 :(得分:0)

发生错误并且由于代码中存在错误而未发生回滚。回滚和检查它应该是:

IF @@TRANCOUNT > 0
    ROLLBACK
 END CATCH

提交后,@@ TRANCOUNT将为零。如果发生错误,@@ TRANCOUNT将为1.在原始代码中,它不会触发回滚但它应该有。