kba*_*che 9 sql rollback sql-server-2008
我犯了一个大错,我执行了这个查询:
update Contact set ContaPassword = '7FD736A3070CB9766'
Run Code Online (Sandbox Code Playgroud)
我忘记了这个WHERE条款,所以这样就更新了所有用户的密码.:(
有没有办法在此查询之前恢复数据?
如果在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所指出的,如果你有备份,那么回到原始数据就不难了.您可以在某处恢复备份并复制原始数据.