存储过程中适当范围的事务
时间:2020-03-06 14:23:57 来源:igfitidea点击:
假设我有一个存储过程来管理自己的事务
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
如何在存储过程中适当地限制事务的范围,以使存储过程不会回滚外部事务?
解决方案
输入时使用@@ trancount查看我们是否已经在交易中
这样做的语法可能因数据库而异。但是在Transact-SQL中,我们要做的是检查@@ TRANCOUNT以查看我们是否正在事务中。如果要创建一个保存点,那么最后可以通过该函数的结尾(相信以后会进行提交或者回滚),否则回滚到保存点。
有关更多信息,请参见Microsoft有关保存点的文档。
对保存点的支持相当广泛,但是我认为用于发现我们当前正在事务中的机制(假设有一个)会有很大不同。