【问题标题】:Conditional transaction rollback条件事务回滚
【发布时间】:2023-03-16 22:34:01
【问题描述】:

我想知道,是否有可能根据特定批次的状态应用条件事务回滚。例如,我有以下代码:

BEGIN TRAN 
--EXEC No 1
    EXEC [dbo].[MyProc] 1;
    GO
--EXEC No 2
    EXEC [dbo].[MyProc] 22;
    GO
--EXEC No 3
    EXEC [dbo].[MyProc] 333;
    GO
--EXEC No 4
    EXEC [dbo].[MyProc] 5;
    GO
COMMIT

如果EXEC No 3 失败,我想回滚整个事务。如果任何其他执行失败,我希望 SQL Server 继续执行我的查询。有可能吗?

【问题讨论】:

  • “失败”是什么意思?
  • 假设第 3 次更新涉及表,该表不存在。

标签: sql-server tsql transactions sql-server-2012 rollback


【解决方案1】:
Begin tran
Begin try
.....
commit
End try
begin catch
rollback
End catch

http://msdn.microsoft.com/fr-fr/library/ms175976.aspx

他们更喜欢在外部进行 begin tran 和 commit

【讨论】:

    【解决方案2】:

    是的,这是可能的。在每个过程调用周围使用 TRY/CATCH 块,确定如何处理每个 CATCH 块中每个过程的错误。

    在您的情况下,仅在 CATCH 块中为第三个过程调用执行 ROLLBACK。

    【讨论】:

      猜你喜欢
      • 2016-04-19
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 2012-12-30
      • 2011-01-22
      • 2011-09-19
      相关资源
      最近更新 更多