我匆忙地运行了一条语句,以更新表而不用where
语句来限定它。因此它开始更新表中的所有记录。
我立即注意到该错误,并在SQL Server Management Studio中单击了“取消执行”按钮,但花了一分钟才停止运行。
所以我的问题是,它是回滚更改还是在通知停止之前进行更改?
我不能仅通过查看就知道哪些记录已更新。如果确实做了任何更改,我将不得不还原该表。
谢谢。
我想跑步:
Update tableA
set newdate = '2019-01-01'
where account = 'abc'
但是我却跑了:
Update tableA
set newdate = '2019-01-01'
该数据库是事务型数据库。
答案 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)
如果查询在取消之前尚未完成,则是,它将回滚。要么执行了整个更新,要么什么都没做。