如果取消,T-SQL 事务是否会回滚



匆忙中,我愚蠢地运行了一个语句来更新表,而没有用where语句对其进行限定。因此,它开始更新表中的所有记录。

我立即注意到了这个错误,并在SQL Server Management Studio中点击了"取消执行"按钮,但花了一分钟才停止运行。

所以我的问题是,它是回滚了更改还是直到被告知停止才进行了更改?

我无法通过查看它们来判断哪些记录已更新。如果它确实进行了任何更改,我将不得不恢复该表。

谢谢。

我想跑:

Update tableA 
set newdate = '2019-01-01' 
where account = 'abc'

但相反,我跑了:

Update tableA 
set newdate = '2019-01-01'

数据库是事务类型数据库。

SQL Server 默认具有默认的事务行为。这意味着您在查询编辑器中运行的每个句子都如下所示:

BEGIN TRANSACTION
<YOUR COMMAND>
COMMIT TRANSACTION

因此,如果您在完成之前取消了交易,则应回滚事务。

如果查询在取消之前尚未完成,那么是的,它已回滚。要么执行整个更新,要么没有任何更改。

最新更新