sql-server - SQL Server : If I stop a single long running update before it is finished, 会自动回滚吗?

标签 sql-server sql-server-2008-r2 rollback

我碰巧执行了一个类似于这个的查询:

update table1
set data=(select data from table1 where key1=val1 and key2=val2)

本来应该只更新一行,但由于我错过了第二个 where 子句,我猜它开始更新数据库中的每一行,其中包含几百万行。

正确的查询大约需要 0 秒,应该是:

update table1
set data=(select data from table1 where key1=val1 and key2=val2)
where key1=val1 and key2=val3

几秒钟后,我意识到它花了太长时间并停止了它。

数据库设置为完全恢复模式并在 sql server 2008 r2 上运行。

问题是,这个查询的效果是什么?我希望不会有任何影响,因为查询在完成之前停止并且 SQL Server 自动回滚更改。对吗?

如果不是,我如何将数据库回滚到特定时间点的状态(就在我进行不幸的更新之前)?

(我看到了这个问题:If I stop a long running query, does it rollback?,但它的不同之处在于它执行多项更改,而不是仅执行一项更改。)

(是的,我确实有最近的备份,但考虑到数据库的大小,我宁愿不必从备份中恢复)

最佳答案

如果您的取消命令及时发出,它会被完整回滚。 DML 语句总是全有或全无。您可能应该检查数据以确保您的取消确实及时到达。它可能在事务已提交后的最后一毫秒左右到达。

关于sql-server - SQL Server : If I stop a single long running update before it is finished, 会自动回滚吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19065738/

相关文章:

sql-server - SQL Server : Consecutive Rows Issue

sql - 如何在 SQL Server 中获取过去两年和当年的记录

c# - 在序列中动态创建图像并重置序列

SQL Server 2008 : Ordering by datetime is too slow

SQL Server rtrim 不适合我,建议?

spring-mvc - Spring集成测试不回滚

c# - 使用 C# SQL Server 调用在 "Using"范围内自动回滚吗?

java - 方法内部 'rollback' REST 方法调用的最佳实践

c# - 将文本框值插入数据库

mysql - SQL查询多个表,其中1中不存在记录