如何撤消SQL Server UPDATE查询?

Ste*_*ger 23 sql sql-server sql-server-2005

在SQL Server Management Studio中,我执行了以下查询.
不幸的是,我忘记取消该WHERE条款.
更新了1647行而不是4行.

如何撤消最后一条陈述?

不幸的是,我刚刚完成了这些1647行的翻译并正在进行最后的修正 ,因此没有备份.

UPDATE [dbo].[T_Language]
   SET 
       [LANG_DE] = 'Mietvertrag' --<LANG_DE, varchar(255),>
      ,[LANG_FR] = 'Contrat de bail' -- <LANG_FR, varchar(255),>
      ,[LANG_IT] = 'Contratto di locazione' -- <LANG_IT, varchar(255),>      
      ,[LANG_EN] = 'Tenancy agreement' -- <LANG_EN, varchar(255),>
       --WHERE [LANG_DE] like 'Mietvertrag'
Run Code Online (Sandbox Code Playgroud)

有一个交易协议,至少我希望如此.

a_h*_*ame 13

可以通过发出命令来恢复未提交的事务 ROLLBACK

但如果你在自动提交模式下运行,你无能为力....

  • 不正确 - 可以通过依赖于OP恢复模型的事务日志以及它们是否曾进行过备份来获得时间点恢复. (4认同)

小智 10

如果您已从数据库中获得完整备份,幸运的是,您在SQL Management Studio中有一个选项.在这种情况下,您可以使用以下步骤:

  1. 右键单击数据库 - >任务 - >还原 - >数据库.

  2. 在常规选项卡中,单击时间轴 - >选择特定日期和时间选项.

  3. 将时间轴滑块移动到更新命令时间之前 - >单击"确定".

  4. 在目标数据库名称中,键入新名称.

  5. 在"文件"选项卡中,选中"将所有文件重新分配到文件夹",然后选择新路径以保存已恢复的数据库.

  6. 在选项选项卡中,选中覆盖...并删除Take tail-log ...选项.

  7. 最后,单击"确定"并等待恢复过程结束.

我自己在操作数据库中使用过这种方法,它非常有用.


Fra*_*ker 5

考虑到您已经有一个完整的备份,我只是将该备份还原到单独的数据库中,然后从那里迁移数据。

如果您的数据在最近一次备份后已更改,那么您将以这种方式恢复所有数据,但是您可以尝试通过读取事务日志来恢复。

如果您的数据库处于完全恢复模式,则事务日志具有足够的详细信息,可以在最新备份后恢复对数据的更新。

您可能想尝试使用DBCC LOG,fn_log函数或使用第三方日志读取器(例如ApexSQL Log)

不幸的是,没有简单的方法来读取事务日志,因为MS不会为此提供文档并以其专有格式存储数据。