一般来说,我只想做到这一点:
begin transaction
begin transaction
select 'x'
rollback
rollback
原因是,我有一个存储过程,代码如下:
begin transaction
--Do stuff
If(problem)
begin
rollback
end else begin
commit
end
它的工作原理就像我想要的那样,但我想通过这样做来测试它:
begin transaction
exec MyStoredProc
rollback
当存储过程执行回滚时,它似乎关闭了两个事务,然后我在存储过程之外的回滚失败。
答案 0 :(得分:2)
SQL Server中没有自治事务。嵌套交易有助于增加@@TRANCOUNT
,但这就是它。正如@marc_s在他的评论中所建议的,ROLLBACK
不仅仅适用于当前的交易范围/水平,它适用于整个事情。
此请求于2008年被驳回:
但是,这个请求仍然有效 - 所以也许有希望:
至于你的外部回滚失败,你可以先检查这个,而不是盲目地做,例如:
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;