我在存储过程中出现此错误。回滚完成 - 但这个错误:EXECUTE后的事务计数表示不匹配的BEGIN和COMMIT语句数
EXECUTE后的事务计数表示BEGIN和COMMIT语句不匹配的数量。以前的计数= 1,当前计数= 0.
我通读了一些答案,发现如果没有提交就返回,我得到错误。我的存储过程是这样的:
BEGIN TRY
BEGIN
if @id is null
BEGIN
set @id= (SELECT last_sequence_value FROM table_name WHERE sequence_name = 'id') + 1
BEGIN
BEGIN TRANSACTION
-- update SQL statement here
IF @@ROWCOUNT = 0
BEGIN
ROLLBACK TRANSACTION
RAISERROR('There was an error getting unique id in the table.',10,1)
RETURN
END
IF (@@ERROR <> 0)
BEGIN
ROLLBACK TRANSACTION
RAISERROR('There was an error updating record to the table',10,1)
RETURN
END
COMMIT TRANSACTION
END
END
else
BEGIN
-- some sql select statements
END
END
END TRY
BEGIN CATCH
-- Raise an error with the details of the exception
RAISERROR(@ErrMsg, @ErrSeverity, 1) WITH SETERROR
END CATCH
从上面的代码,我做了回滚,并从存储过程返回。然而,当我在perf测试环境中运行这个时,我得到了前面提到的错误。
对此有帮助。
你想要以上? –
是的 - 嵌套事务时不应该使用回滚事务 - 这会将最外层的事务回滚回来,因此有关@@ trancount的错误将保留为0.您可能需要使用Save Points [here](https://stackoverflow.com/ a/28038615/314291)和[这里](https://stackoverflow.com/a/9744581/314291) – StuartLC
@StuartLC - 是的,你是对的,但因为我已经回滚了交易并提到了return语句,所以没有办法它应该进入提交事务。所以我仍然不确定为什么会出现这个错误。如果我在没有回滚的情况下进行了回报,那么风险很大,因为它会保持交易的开放。 – GuruC