sql-server - 为什么即使回滚事务,SQL Server 仍保持可变状态?

标签 sql-server transactions rollback

我写了一个脚本来做一个小实验:

use MyDatabase;
declare @variable int;
set @variable = 5;
begin tran test
    set @variable = 6;
rollback tran test;
select @variable;

如您所见,@variable 在脚本的开头被声明,用 5 初始化,然后在 transaction 中它设置为 6。在 transaction 回滚后,我们显示 @variable,它的值仍然是 6,尽管它的值变化是在 transaction 从那时起回滚。我本以为选择会产生 5 的结果。这种行为的原因是什么?

最佳答案

因为事务是用来维护真实数据的,表中的数据(不是变量,不是表变量)。这就是它的全部内容。

这对于您可能想要回滚但从事务中返回一些单独的值作为回滚原因的指示(可能抛出或只是重新调整变量状态代码)的情况很有用。

关于sql-server - 为什么即使回滚事务,SQL Server 仍保持可变状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39931886/

相关文章:

sql-server - 使用 case 执行子查询

sql - 如何防止 SQL Server 对扫描的行数进行平方?

sql - 仅按第二列分组

git - 'revert'、 'amend,'、 'rollback' 和 'undo' 之间有什么区别?

sql-server - SQL如何检查带有两个前缀的单元格中的前缀

php - Codeigniter Try Catch 交易

mysql - 当用户更新时,确保一个用户的选择语句对另一个用户是正确的?

c# - 在线程之间共享事务范围

sql - 在事务中有什么是不能做的(然后安全回滚)吗?

spring - Spring JDBC 测试的事务回滚