回滚整个存储过程
Posted
技术标签:
【中文标题】回滚整个存储过程【英文标题】:Rollback an entire stored procedure 【发布时间】:2016-09-10 12:39:17 【问题描述】:我有一个包含多个更新语句的存储过程。我不想使用 try catch。如何回滚存储过程并取回原始表?
这样的东西能行吗-
开始交易 t1 spName 回滚事务 t1
【问题讨论】:
您可以将存储过程的主体包装在单个事务中。 你为什么不想使用try catch。除了让您调试语法问题之外,您的 proc 基本上什么都不做。 存储过程中的查询将通过作业每周触发。现在在测试执行存储prc后是否要取回原始表时,如何取回原始表? #scsimon 你是对的,但我的要求是别的 【参考方案1】:是的,您可以将所有内容都包装到一个存储过程中到一个事务中
begin tran
exec testproc
commit tran
--rollback tran --for condition
即使对于提交和回滚也能正常工作
如果在存储过程中你需要打开另一个事务那么你需要捕获
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
【讨论】:
以上是关于回滚整个存储过程的主要内容,如果未能解决你的问题,请参考以下文章