我有一个包含多个更新语句的存储过程。我不想使用try catch。如何回滚存储过程并返回原始表?
可以像这样工作 -
开始交易t1 spName 回滚事务t1
答案 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