我犯了一个大错,我执行了这个查询:
update Contact set ContaPassword = '7FD736A3070CB9766'
我忘记了WHERE
子句,因此这样更新了所有用户的密码。 :(
我可以在此查询之前恢复数据吗?
答案 0 :(得分: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
Martin Smith在这个主题上指出了this excellent post by Brent Ozar on dba.stackexchange.com。在完全恢复模式下,可以检查日志文件以查看更改的内容。
另外,正如Oded所指出的,如果你有备份,就不难回到原始数据。您可以在某处恢复备份并复制原始数据。