我创建了一个变量表。在我的存储过程中,有很多事务。
现在,每当发生错误时,我想回滚特定事务,该事务包含一些从变量表中插入、更新或删除记录的语句。
这只是我的实际问题的一个例子:
declare @tab table (val int)
insert into @tab select 2
insert into @tab select 3
insert into @tab select 4
select * from @tab
begin tran
begin try
update @tab set val = 1
select 1/0;
commit
end try
begin catch
rollback
end catch
select * from @tab
Actual output :-
![enter image description here](https://i.stack.imgur.com/RygjP.png)
我的预期输出是:-
![enter image description here](https://i.stack.imgur.com/tmyo8.png)
所以这里事务回滚不起作用。为什么它在这里不起作用?难道我做错了什么 ?
您没有使用temp
表,您正在使用variable
桌子。它们是有区别的。
临时表可以处理事务,而变量表则不能。看http://blog.sqlauthority.com/2009/12/28/sql-server-difference-temp-table-and-table-variable-effect-of-transaction/
如果您要更改变量表@tab
到一个临时表#tab
,你会得到你想要的行为。
临时表和变量表之间的区别:https://dba.stackexchange.com/questions/16385/whats-the-difference- Between-a-temp-table-and-table-variable-in-sql-server/16386#16386
我修改了我的问题。感谢您的知识分享。但问题仍然是一样的。为什么它不适用于变量表?
我上面发布的链接比我能提供的更详细。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)