代码之家  ›  专栏  ›  技术社区  ›  Amy B

存储进程中的范围正确的事务

  •  4
  • Amy B  · 技术社区  · 16 年前

    假设我有一个管理自己事务的存储过程

    CREATE PROCEDURE theProc
    AS
    BEGIN
    
      BEGIN TRANSACTION
    
    -- do some stuff
    
      IF @ThereIsAProblem
        ROLLBACK TRANSACTION
      ELSE
        COMMIT TRANSACTION
    END
    

    如果我从现有事务调用这个过程,该过程可以回滚外部事务。

    BEGIN TRANSACTION
    EXEC theProc
    COMMIT TRANSACTION
    

    如何在存储过程中正确地限定事务的范围,以便存储过程不回滚外部事务?

    2 回复  |  直到 16 年前
        1
  •  2
  •   user11318    16 年前

    执行此操作的语法可能因数据库而异。但在Transact-SQL中,您要做的是检查@@TranCount以查看您是否在事务中。如果是这样,那么您希望创建一个保存点,在最后,您只需通过函数的末尾(相信提交或回滚将在稍后发生),或者回滚到您的保存点。

    请参阅上的Microsoft文档 savepoints 更多。

    对保存点的支持相当广泛,但我认为发现您当前正在处理的事务的机制(假设有一个)会有很大的不同。

        2
  •  1
  •   Francesca    16 年前

    使用@@TranCount查看输入时是否已在事务中