【问题标题】:How to make a trasanction cover several stored procedure?如何让一个事务覆盖多个存储过程?
【发布时间】:2009-10-22 16:31:41
【问题描述】:

我需要在单个数据库的单个事务中包含多个存储过程, 如果任何存储过程失败,则回滚范围内处理的所有存储过程的事务。

我使用 SQL-SERVER 2008

【问题讨论】:

    标签: sql-server sql-server-2008 stored-procedures transactions


    【解决方案1】:
    begin transaction
    begin try
      exec proc_1
      exec proc_2
      exec proc_3
      commit transaction
    end try
    begin catch
      rollback transaction
    end catch
    

    【讨论】:

    • 您需要扩展此处显示的错误处理,然后对其进行测试,直到您厌倦为止。搞砸的“事务控制”会产生真正可怕的结果。
    • 确实——我的简单示例不会向调用应用程序报告错误
    【解决方案2】:

    您可以创建一个存储过程来启动一个事务,然后调用其他存储过程。如果任何内部存储过程失败,您可以回滚事务。如果您告诉我们您使用的是什么数据库平台(MS SQL Server、MySQL 等),人们或许能够提供更具体的解决方案。

    【讨论】:

    【解决方案3】:

    无法比这更好地描述解决方案。

    Handling SQL Server Errors in Nested Procedures

    【讨论】:

      【解决方案4】:

      事务通常处于连接级别,因此如果您想通过代码 api 控制事务,您应该能够使用相同的“事务对象”。

      .Net 示例http://msdn.microsoft.com/en-us/library/2k2hy99x.aspx 使用 ado.net

      【讨论】:

      • 如果事务可以完全“包含”在一个数据库服务器实例中,为简单起见,我将在该数据库调用中实现它in。如果它绝对必须涵盖在数据库之外完成的工作,我只会在数据库之外实现它。
      • 我不同意你的观点,但有些人更喜欢使用 ORM 框架或类似的框架,并且更喜欢尽可能少的数据库对象
      猜你喜欢
      • 1970-01-01
      • 2012-02-26
      • 2013-03-04
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-03
      相关资源
      最近更新 更多