【问题标题】:Properly scoped transactions in Stored Procs存储过程中适当范围的事务
【发布时间】:2010-09-11 00:04:39
【问题描述】:

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

CREATE PROCEDURE theProc
AS
BEGIN

  BEGIN TRANSACTION

-- do some stuff

  IF @ThereIsAProblem
    ROLLBACK TRANSACTION
  ELSE
    COMMIT TRANSACTION
END

如果我从现有事务中调用此 proc,则 proc 可以 ROLLBACK 外部事务。

BEGIN TRANSACTION
EXEC theProc
COMMIT TRANSACTION

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

【问题讨论】:

  • 观看this DNR-TV video,他们谈论了很多关于事务范围的内容,尽管在代码和 sql 中处理它。希望这会有所帮助。

标签: sql-server stored-procedures transactions scope


【解决方案1】:

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

有关更多信息,请参阅 Microsoft 在 savepoints 上的文档。

对保存点的支持相当广泛,但我认为发现您当前处于事务中的机制(假设有)会有很大差异。

【讨论】:

    【解决方案2】:

    输入时使用@@trancount 查看是否已经在交易中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-28
      • 1970-01-01
      • 2016-09-29
      • 2013-09-02
      • 1970-01-01
      相关资源
      最近更新 更多