错误地我更新表而不放置条件。现在我想要所有以前的记录在表中。我怎样才能收回所有行

时间:2015-01-15 08:38:16

标签: sql-server sql-server-2008

在SQL server中,我使用查询更新表而不放置where条件。 现在我想要所有以前的记录在表中。我怎样才能收回所有行。 此查询直接执行,不使用任何事务。

1 个答案:

答案 0 :(得分:4)

你可以在这里做三件事。

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

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

选项2:从备份执行完整还原并重播事务日志

这将首先与选项1相同,但随后重播您在备份后在数据库中执行的所有修改。显然,你只会在你搞砸之前重播交易日志。

选项3:手动拼接数据

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


既然您已经说过没有备份,那么您现在面前有3项任务:

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

  4. 诀窍:当你害怕搞砸时如何更新数据库

    你基本上写这样的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中专门选择一段SQL并仅执行该操作即可。如果您确认所有内容都正确无误,包括告知您更新/删除/插入了多少行的消息,那么您将ROLLBACK TRANSACTION替换为COMMIT TRANSACTION并实际保存更改。