4

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

CREATE PROCEDURE theProc
AS
BEGIN

  BEGIN TRANSACTION

-- do some stuff

  IF @ThereIsAProblem
    ROLLBACK TRANSACTION
  ELSE
    COMMIT TRANSACTION
END

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

BEGIN TRANSACTION
EXEC theProc
COMMIT TRANSACTION

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

4

2 回答 2

2

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

有关更多信息,请参阅 Microsoft 关于保存点的文档。

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

于 2008-09-18T23:18:47.257 回答
1

输入时使用@@trancount 查看您是否已经在事务中

于 2008-09-18T23:16:25.187 回答