Shi*_*rma 4 sql sql-server sql-server-2008 sql-server-2012
我有一个包含多个更新语句的存储过程。我不想使用 try catch。如何回滚存储过程并取回原始表?
可以像这样的工作 -
开始事务 t1 spName 回滚事务 t1
是的,您可以将所有内容包装到 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)