我错误地更新了一个表,但没有添加 where 条件。现在我想要表中所有以前的记录。我怎样才能取回所有行

Dev*_*mar -1 sql-server sql-server-2008

在 SQL Server 中,我使用查询更新表,而不添加 where 条件。现在我想要表中所有以前的记录。我怎样才能取回所有行。该查询直接执行,没有使用任何事务。

ang*_*son 6

您可以在这里做三件事。

选项 1:从备份进行完整恢复

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

选项 2:从备份进行完整恢复并重播事务日志

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

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

在这里,您基本上必须返回并使用“新”旧数据更新行。您可能拥有的任何数据来源都将非常宝贵,例如打印输出、屏幕截图、内存等。


既然您已经说过您没有备份,那么您现在面临 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
Run Code Online (Sandbox Code Playgroud)

当这样做时,您可以进行实验,只要您没有在 Management Studio 中专门选择一条 SQL 并仅执行它即可。当您验证一切都正确后,包括告诉您更新/删除/插入了多少行的消息,然后您替换ROLLBACK TRANSACTIONCOMMIT TRANSACTION实际保存更改。