You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行UPDATE语句修改表字段值出错后如何进行回滚操作

回滚错误UPDATE操作的解决方案

场景1:执行UPDATE前手动开启了事务,未执行COMMIT操作

直接运行回滚语句即可撤销本次所有更改:

ROLLBACK TRANSACTION;

场景2:事务已自动/手动提交,需恢复更改

SQL Server默认开启自动提交事务,若你执行UPDATE前没有手动开启事务,语句运行完成后会自动提交,无法直接回滚,可通过以下两种方式恢复数据:

  • 方法1:从备份恢复
    如果你有执行UPDATE之前的数据库完整备份+事务日志备份,可以先将备份还原到临时库,指定还原时间点为UPDATE执行前的时刻,再将[PEA].[pc].[TPC_Participants_Record_STG]表的对应数据同步回原库即可。
  • 方法2:从事务日志提取回滚语句
    不要对当前数据库执行大量写入操作,避免事务日志被覆盖。可以使用SQL Server自带的fn_dblog函数,或者第三方事务日志分析工具,从事务日志中提取本次UPDATE操作对应的旧值,生成反向更新语句执行即可恢复数据。

注意:事务日志仅保留未被覆盖的操作记录,如果数据库的恢复模式是简单模式,且事务日志已被截断,此方法无效。


后续高危操作建议

之后执行UPDATE、DELETE这类会修改数据的语句前,建议先开启显式事务,确认操作符合预期再提交:

BEGIN TRANSACTION;

-- 先执行UPDATE/DELETE语句
update t1
set t1.[DateAdded] = case 
                         when t1.[DateAdded] is null
                             then cast(getdate() as date) 
                     end
from [PEA].[pc].[TPC_Participants_Record_STG] as t1;

-- 核对影响行数、更新结果是否符合预期,没问题就提交,有问题就回滚
-- COMMIT TRANSACTION;
-- ROLLBACK TRANSACTION;

也可以先写等价的SELECT语句确认要修改的行范围,避免误操作。

内容的提问来源于stack exchange,提问作者Chicken Sandwich No Pickles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:57:03