10

我犯了一个巨大的错误,我执行了这个查询:

update Contact set ContaPassword = '7FD736A3070CB9766'

我忘记了WHERE条款,所以它更新了所有用户的密码。:(

有没有办法可以在此查询之前恢复数据?

4

1 回答 1

7

如果您在 BEGIN TRANSACTION / ROLLBACK 之外运行更改,则无法撤消更改。这就是为什么我开始任何类型的生产数据更新:

BEGIN TRANSACTION

-- report the bad or undesired data condition before-hand
SELECT ...

-- change the data
INSERT/UPDATE/DELETE ...

-- ensure we changed a reasonable number of records; may not be accurate if table has triggers
SELECT @@ROWCOUNT

 -- get the data condition afterwards and be sure it looks good.
SELECT ...

-- always start with this enabled first
ROLLBACK

-- don't do this until you are very sure the change looks good
-- COMMIT

Martin Smith 指出了Brent Ozar 在 dba.stackexchange.com上关于这个主题的这篇出色的帖子。在完全恢复模式下,可以检查日志文件以查看发生了什么变化。

此外,正如 Oded 所指出的,如果您有备份,那么恢复原始数据并不难。您可以在某处恢复备份并复制原始数据。

于 2012-09-20T18:12:20.510 回答