回滚整个存储过程

时间:2016-09-10 12:39:17

标签: sql sql-server sql-server-2008 sql-server-2012

我有一个包含多个更新语句的存储过程。我不想使用try catch。如何回滚存储过程并返回原始表?

可以像这样工作 -

开始交易t1 spName 回滚事务t1

1 个答案:

答案 0 :(得分:2)

是的,您可以将所有内容都包装到事务中

begin tran
exec testproc

commit tran
--rollback tran --for condition

即使对于提交和回滚也可以正常工作

如果在sproc里面你需要打开另一个事务,那么你需要捕获

DECLARE @vTranCount   INT = @@TRANCOUNT

--Commit
IF (@vTranCount = 0 AND @@TRANCOUNT <> 0) COMMIT TRANSACTION --Commit if the Tran is created by this sproc

--rollback during catch
IF(@vTranCount = 0 AND @@TRANCOUNT > 0) ROLLBACK TRANSACTION --Rollback if the Tran is created by this sproc