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

时间:2019-01-07 15:31:48

标签: sql sql-server

我匆忙地运行了一条语句,以更新表而不用where语句来限定它。因此它开始更新表中的所有记录。

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

所以我的问题是,它是回滚更改还是在通知停止之前进行更改?

我不能仅通过查看就知道哪些记录已更新。如果确实做了任何更改,我将不得不还原该表。

谢谢。

我想跑步:

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

但是我却跑了:

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

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

2 个答案:

答案 0 :(得分:2)

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

declare
  l_cnt number;
  retval varchar2(200);
begin
  select count(*)
    into l_cnt
    from your_table t
    where t.column_one = :P1_ONE
      and t.column_two = :P1_TWO;

  if l_cnt > 0 then 
     retval := 'The entry for this combination already exists';
  end if;
end;

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

答案 1 :(得分:1)

如果查询在取消之前尚未完成,则是,它将回滚。要么执行了整个更新,要么什么都没做。