gpt4 book ai didi

sql - 为什么回滚不适用于 SQL Server 2012 中的变量表?

转载 作者:行者123 更新时间:2023-12-04 15:58:36 25 4
gpt4 key购买 nike

我已经创建了一个变量表。在我的存储过程中,有很多事务。

现在,无论何时发生错误,我都想回滚一个特定的事务,该事务具有一些从变量表中插入或更新或删除记录的语句。

这只是我实际问题的一个例子:

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

实际输出:-
enter image description here

我的预期输出是:-

enter image description here

所以这里事务的回滚不起作用。为什么它不在这里工作?我做错了什么吗?

最佳答案

您没有使用 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

I have modified my question. Thanks for your knowledge sharing. But question remains the same. Why it is not working for variable table?

我在上面发布的链接比我更详细地介绍了它。

关于sql - 为什么回滚不适用于 SQL Server 2012 中的变量表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31723476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com