撤消已执行的SQL查询

时间:2014-01-02 14:29:05

标签: sql database sql-server-2008 database-design sql-server-2008-r2

我目前正在搜索可以将数据重新恢复为原始格式的查询。

例如,如果我执行以下查询:

UPDATE Pupil
SET Telephone = '999'
WHERE Telephone = '0161'

我已经完成了这个查询,并意识到我不想改变电话,并希望它像以前一样。我理解使用视图并复制同一个表来测试查询是有用的。

但我想知道是否实际上有一个查询来重做我所做的更新或删除查询。

3 个答案:

答案 0 :(得分:1)

这假设其他数据可能已包含999,您可能希望保留原样,或者您可以通过反转原始查询值将所有999恢复为0161。

如果您有完整的数据库登录并在事务期间执行此操作,则可能只回滚该一个事务...当然,如果您还原旧备份,则可以重新运行自备份以来的事务更改。

否则,您可能必须将备份还原到副本数据库,找到匹配的记录,并更新到该值的旧值...还原到同一服务器,例如MyDataBaseName_Old意味着您可以跨数据库连接到得到旧记录。 e.g。

update MyDatabaseName.dbo.Pupil
set p.Telephone = pold.Telephone
from MyDatabaseName.dbo.Pupil p
inner join MyDatabaseName_Old.dbo.Pupil pold on p.PupilID = pold.PupilID
where pold.Telephone = '0161'

抱歉,我无法提供更多帮助。希望它能为您提供一些其他您可能想要搜索的提示。

答案 1 :(得分:0)

您只能使用BackUps。使用完全备份与事务日志备份。然后,您将能够将数据库状态恢复到所需的状态。否则,无法在SQL Server中还原更新的行。我听说在Oracle中存在一个对数据库状态进行查询的功能,这是一段时间以前的事情。希望SQL服务器能够遵循它们并开发这样的功能。

答案 2 :(得分:0)

由于您使用的是SQL Server 2008 R2,因此您可能对Change Data Capture感兴趣。这不是一件容易的crtl-z,但它可能会有所帮助。