我已使用此查询更新了我的数据库:
UPDATE suppliers SET contactname = 'Dirk Lucky'
所以供应商表中的所有行都有联系人姓名:“Dirk Lucky。”
如何回滚此交易?我想恢复供应商表中的contactname列。
谢谢, 程序员
答案 0 :(得分:4)
听起来您的交易已经提交。你再也不能回滚了。
您唯一的选择是恢复备份。您可以将备份还原为新数据库,这样您就可以只复制联系人名称而不会丢失任何其他更改。
答案 1 :(得分:4)
如果您具有FULL模式的完整日志,则可以从日志中进行还原。有一篇关于它的优秀博客文章here。
如果你不这样做,我真的希望你有一个备份。
供将来参考:当我进行更新时,我使用以下语法:
SELECT *
--UPDATE a SET col = 'val'
FROM myTable a
WHERE id = 1234
这样,您可以看到您首先要更新的内容。然后,当您最终准备好更新时,您只需从UPDATE中选择并运行查询。我用这个技巧多次抓住自己。它也适用于删除,因此这是一个奖励。
答案 2 :(得分:0)
希望您的数据库使用完整恢复模型。如果是这样的话:
首先,您需要立即进行事务日志备份。
然后,您可以从FULL backup + Differntials执行数据库还原。
完成后,您可以将事务日志还原到更新语句之前的特定时间点。
请参阅"How to Restore to a point in time"
正如其他海报所建议的那样,您可以恢复到另一个数据库,并在您希望最大限度地减少停机时间时将更新应用回实时数据库。
希望这是有道理的,但如果您需要帮助,请告诉我。