【问题标题】:Roll-back last UPDATE SQL query in SQL Server 2014回滚 SQL Server 2014 中的最后一个 UPDATE SQL 查询
【发布时间】:2015-12-30 13:21:51
【问题描述】:

我不小心执行了查询:

UPDATE TableName 
SET Name='Ram' 

如何撤消此更改?

【问题讨论】:

  • 问题是什么?
  • 查询是否在事务中?如果没有,那么你不能!
  • 否;你不能 - 请参阅stackoverflow.com/questions/14472785/…(除非你使用了交易)
  • 如果上一个查询不在打开的事务中,则无法回滚。因此,在这种情况下,您只能从备份中恢复数据库。
  • 坏消息...正如上面提到的其他人,SQL Server 具有自动提交功能,默认情况下使所有 DML 语句具体化,而无需运行 COMMIT;命令。您需要做的是给您的 DBA 打电话,看看您可以使用哪些表恢复选项。大多数数据库都会保存隔夜快照,因此如果您的查询具有破坏性,DBA 可以回滚整个表。

标签: sql sql-server sql-server-2014


【解决方案1】:

在运行更新或删除之前,尤其要测试它们。对于删除,将语句放入选择块中。

SELECT COUNT(NAME)
FROM TableName
WHERE

并确保返回的记录数与您要删除的记录数相匹配。对于更新,它更加复杂。您将不得不使用事务。

BEGIN TRANSACTION 
UPDATE TableName
SET Name = 'Ram'

SELECT *
FROM TableName
WHERE Name = 'Ram'
--Rollback Transaction
--Commit Transaction

根据您在事务中所做的,只需运行第一部分,将提交和回滚注释掉,然后选择将让您验证一切正常,然后如果它是您想要的突出显示并运行没有 cmets 的 COMMIT,如果它不是您想要的然后突出显示运行只是 ROLLBACK 没有 cmets 撤消它并重试。希望这对将来有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多