如何在没有事务的情况下回滚

kba*_*che 9 sql rollback sql-server-2008

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

update Contact set ContaPassword = '7FD736A3070CB9766'
Run Code Online (Sandbox Code Playgroud)

我忘记了这个WHERE条款,所以这样就更新了所有用户的密码.:(

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

Pau*_*ams 6

如果在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
Run Code Online (Sandbox Code Playgroud)

Martin Smith 在dba.stackexchange.com上就此话题指出了Brent Ozar的优秀帖子.在完全恢复模式下,可以检查日志文件以查看更改的内容.

另外,正如Oded所指出的,如果你有备份,那么回到原始数据就不难了.您可以在某处恢复备份并复制原始数据.