我写了一个脚本来做一个小实验:
use MyDatabase;
declare @variable int;
set @variable = 5;
begin tran test
set @variable = 6;
rollback tran test;
select @variable;
如您所见,@variable
在脚本开头是declare
d,用5初始化,然后在transaction
内,它被设置为6. {{1}之后回滚后,我们显示transaction
,它仍然具有值6,尽管它的值更改在@variable
内,从那时起被回滚。我本来期望选择结果为5.这种行为的原因是什么?
答案 0 :(得分:5)
因为事务用于维护真实数据,表中的数据(不是变量,而不是表变量)。这就是关于它的一切。
这对于您可能想要回滚但从事务中返回一些单独值的情况非常有用,作为您回滚原因的指示(可能抛出或只是重新调整变量状态代码)。
答案 1 :(得分:2)
考虑变量遵循事务语义需要什么。您需要将所有更改写入事务日志(可能不是 事务日志),以便可以向前和向后滚动它们。为了什么?变量本质上是短暂的,因此在数据库或服务器崩溃的情况下,您无法恢复它们。因此,它是一种高成本,低回报的操作。不是你想要的象限。