我错误地更新了 table 而没有放置 where 条件。现在我想要 table 中的所有先前记录。我怎样才能取回所有行

By mistake i update a table without putting where condition. Now i want all previous record in table. How Can i get back all rows

在 SQL 服务器中,我使用查询更新了一个 table 而没有放置 where 条件。 现在我想要 table 中的所有先前记录。我怎样才能取回所有行。 此查询直接执行,未使用任何事务。

您可以在这里做三件事。

选项 1:从备份进行完全还原

这会将数据库重置回以前的时间点。在此之后您在数据库中修改的任何内容都将丢失。

选项 2:从备份进行完全还原并重播您的事务日志

这将首先执行与选项 1 相同的操作,但随后会重播您在备份后对数据库所做的所有修改。显然,您只会重播事务日志,直到您搞砸的那一点之前。

选项 3:开始手动拼凑数据

在这里,您基本上必须返回并使用 "new" 旧数据更新行。您可能拥有的此数据的任何来源在这里都将是无价的,例如打印输出、屏幕截图、内存等。


既然你已经说过你没有备份,那么你现在有 3 个任务要完成:

  1. 开始备份您的数据库
  2. 学习更新数据库的技巧
  3. 上面的选项 3,手动拼凑数据,尽可能将行更新回它们的旧值

绝招:怕乱了怎么更新数据库

您基本上是这样编写 SQL 脚本的:

BEGIN TRANSACTION

SELECT ... anything you need to verify that the update has NOT taken place

UPDATE ... your update statement (or DELETE, INSERT, etc.)

SELECT ... anything you need to verify that the update HAS taken place

ROLLBACK TRANSACTION

以这种方式进行时,您可以进行试验,只要您不在 Management Studio 中专门 select 一块 SQL 并仅执行它。当您验证一切正确后,包括告诉您 updated/deleted/inserted 有多少行的消息,然后您将 ROLLBACK TRANSACTION 替换为 COMMIT TRANSACTION 并实际保存更改。