在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'
有一个交易协议,至少我希望如此。
答案 0 :(得分:12)
可以通过发出命令ROLLBACK
但如果你在自动提交模式下运行,你无能为力......
答案 1 :(得分:7)
如果您已从数据库中获得完整备份,幸运的是,您在SQL Management Studio中有一个选项。在这种情况下,您可以使用以下步骤:
右键单击数据库 - &gt;任务 - &gt;恢复 - &gt;数据库中。
在常规标签中,点击时间轴 - &gt;选择特定日期和时间选项。
将时间线滑块移动到更新命令时间之前 - &gt;单击“确定”。
在目标数据库名称中,键入新名称。
在“文件”选项卡中,选中“将所有文件重新分配到文件夹”,然后选择新路径以保存已恢复的数据库。
在选项标签中,选中覆盖...并删除Take tail-log ...选项。
最后,单击“确定”并等待恢复过程结束。
我自己在操作数据库中使用过这种方法,它非常有用。
答案 2 :(得分:4)
考虑到您已经有完整备份,我只是将该备份恢复到单独的数据库中并从那里迁移数据。
如果您的数据在最新备份后发生了变化,那么您可以通过这种方式恢复所有数据,但您可以尝试通过阅读事务日志来恢复该数据。
如果您的数据库处于完全恢复模式,那么事务日志有足够的详细信息可以在最新备份后恢复数据更新。
您可能想尝试使用DBCC LOG,fn_log函数或第三方日志阅读器,例如ApexSQL Log
不幸的是,没有简单的方法来读取事务日志,因为MS没有为此提供文档并以其专有格式存储数据。
答案 3 :(得分:0)
由于您有一个完整备份,您可以将备份还原为另一个服务器,作为同名数据库或具有不同名称的同一服务器。
然后,您只需查看更新前的内容并编写SQL脚本即可进行更新。
答案 4 :(得分:0)
如果您能及时发现问题并且没有ROLLBACK
或使用事务日志的功能,则可以立即进行备份并使用Redgate's SQL Data Compare之类的工具来生成脚本以“还原”受影响的数据。这对我来说就像是一种魅力。 :)