存储过程中适当范围的事务
-
01-07-2019 - |
题
假设我有一个管理自己事务的存储过程
CREATE PROCEDURE theProc
AS
BEGIN
BEGIN TRANSACTION
-- do some stuff
IF @ThereIsAProblem
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
END
如果我从现有事务调用此过程,该过程可以回滚外部事务。
BEGIN TRANSACTION
EXEC theProc
COMMIT TRANSACTION
如何在存储过程中正确确定事务范围,以便存储过程不会回滚外部事务?
解决方案
执行此操作的语法可能因数据库而异。但在 Transact-SQL 中,您要做的是检查 @@TRANCOUNT 来查看您是否处于事务中。如果是,那么您想要创建一个保存点,最后您可以直接通过函数的末尾(相信稍后会发生提交或回滚),或者回滚到您的保存点。
请参阅 Microsoft 的文档 保存点 了解更多。
对保存点的支持相当广泛,但我认为用于发现您当前处于事务中的机制(假设有一个)会有很大不同。
其他提示
输入时使用@@trancount查看您是否已经处于交易状态
不隶属于 StackOverflow