撤消已执行的 SQL 查询

问题描述 投票:0回答:4

我目前正在搜索一个可以将数据改回其原始形式的查询。

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

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

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

但我想知道是否确实存在一个查询来重做我所做的更新或删除查询。

sql database sql-server-2008 database-design sql-server-2008-r2
4个回答
1
投票

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

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

否则,您可能必须将备份恢复到副本数据库,找到匹配的记录,然后更新到该记录的旧值...恢复到同一服务器,例如 MyDataBaseName_Old 意味着您可以跨数据库加入以获取旧记录。例如

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'

抱歉,我无法提供更多帮助。希望它能为您提供一些有关您可能还想搜索的内容的提示。


0
投票

您只能通过我的备份方式来完成此操作。将完整备份与事务日志备份一起使用。然后您就可以将数据库状态恢复到所需的状态。否则无法恢复 SQL Server 中更新的行。我听说Oracle中有一个功能可以查询数据库的状态,这是前一段时间的。希望SQL Server也能效仿他们,开发这样的功能。


0
投票

由于您使用的是 SQL Server 2008 R2,您可能对 更改数据捕获感兴趣。这不是一件容易的事

crtl-z
,但它会有所帮助。


0
投票

我已经在这个数据库中编写了MYNATPLC数据库的语法,我创建了Emloyee,Department并执行了它们,但是我无法获取我创建的语法。如何获取它们

© www.soinside.com 2019 - 2024. All rights reserved.