如何撤消SQL Server UPDATE查询?

时间:2011-01-14 13:36:24

标签: 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'

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

5 个答案:

答案 0 :(得分:12)

可以通过发出命令ROLLBACK

来恢复未提交的事务

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

答案 1 :(得分:7)

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

  1. 右键单击数据库 - &gt;任务 - &gt;恢复 - &gt;数据库中。

  2. 在常规标签中,点击时间轴 - &gt;选择特定日期和时间选项。

  3. 将时间线滑块移动到更新命令时间之前 - &gt;单击“确定”。

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

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

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

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

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

答案 2 :(得分:4)

考虑到您已经有完整备份,我只是将该备份恢复到单独的数据库中并从那里迁移数据。

如果您的数据在最新备份后发生了变化,那么您可以通过这种方式恢复所有数据,但您可以尝试通过阅读事务日志来恢复该数据。

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

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

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

答案 3 :(得分:0)

由于您有一个完整备份,您可以将备份还原为另一个服务器,作为同名数据库或具有不同名称的同一服务器。

然后,您只需查看更新前的内容并编写SQL脚本即可进行更新。

答案 4 :(得分:0)

如果您能及时发现问题并且没有ROLLBACK或使用事务日志的功能,则可以立即进行备份并使用Redgate's SQL Data Compare之类的工具来生成脚本以“还原”受影响的数据。这对我来说就像是一种魅力。 :)