How to undo a SQL Server UPDATE query?

前端 未结 5 1750
旧巷少年郎
旧巷少年郎 2021-02-03 21:22

In SQL Server Management Studio, I did the query below.
Unfortunately, I forgot to uncomment the WHERE clause.
1647 rows were updated instead of 4.

相关标签:
5条回答
  • 2021-02-03 21:47

    Since you have a FULL backup, you can restore the backup to a different server as a database of the same name or to the same server with a different name.

    Then you can just review the contents pre-update and write a SQL script to do the update.

    0 讨论(0)
  • 2021-02-03 21:56

    If you already have a full backup from your database, fortunately, you have an option in SQL Management Studio. In this case, you can use the following steps:

    1. Right click on database -> Tasks -> Restore -> Database.

    2. In General tab, click on Timeline -> select Specific date and time option.

    3. Move the timeline slider to before update command time -> click OK.

    4. In the destination database name, type a new name.

    5. In the Files tab, check in Reallocate all files to folder and then select a new path to save your recovered database.

    6. In the options tab, check in Overwrite ... and remove Take tail-log... check option.

    7. Finally, click on OK and wait until the recovery process is over.

    I have used this method myself in an operational database and it was very useful.

    0 讨论(0)
  • 2021-02-03 21:56

    Considering that you already have a full backup I’d just restore that backup into separate database and migrate the data from there.

    If your data has changed after the latest backup then what you recover all data that way but you can try to recover that by reading transaction log.

    If your database was in full recovery mode than transaction log has enough details to recover updates to your data after the latest backup.

    You might want to try with DBCC LOG, fn_log functions or with third party log reader such as ApexSQL Log

    Unfortunately there is no easy way to read transaction log because MS doesn’t provide documentation for this and stores the data in its proprietary format.

    0 讨论(0)
  • 2021-02-03 21:56

    If you can catch this in time and you don't have the ability to ROLLBACK or use the transaction log, you can take a backup immediately and use a tool like Redgate's SQL Data Compare to generate a script to "restore" the affected data. This worked like a charm for me. :)

    0 讨论(0)
  • 2021-02-03 21:59

    A non-committed transaction can be reverted by issuing the command ROLLBACK

    But if you are running in auto-commit mode there is nothing you can do....

    0 讨论(0)
提交回复
热议问题