回滚整个存储过程

Shi*_*rma 4 sql sql-server sql-server-2008 sql-server-2012

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

可以像这样的工作 -

开始事务 t1 spName 回滚事务 t1

Kan*_*amy 6

是的,您可以将所有内容包装到 sproc 中

begin tran
exec testproc

commit tran
--rollback tran --for condition
Run Code Online (Sandbox Code Playgroud)

即使对于提交和回滚,它也能正常工作

如果在 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
Run Code Online (Sandbox Code Playgroud)