如何在SQL Server 2005中回滚UPDATE查询?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在SQL Server 2005中回滚UPDATE查询?相关的知识,希望对你有一定的参考价值。

如何在SQL Server 2005中回滚UPDATE查询?

我需要在SQL中执行此操作,而不是通过代码。

答案
begin transaction

// execute SQL code here

rollback transaction

如果您已经执行了查询并希望将其回滚,那么您唯一真正的选择就是恢复数据库备份。如果您使用完全备份,则应该能够将数据库还原到特定时间点。

另一答案

尝试

ROLLBACK WORK;

它通常有效

另一答案

您需要此工具,您可以找到该交易并将其撤消。

ApexSQL Log

另一答案

您可以使用隐式事务

SET IMPLICIT_TRANSACTIONS ON

update Staff set staff_Name='jas' where staff_id=7

ROLLBACK

根据您的要求 - 您可以通过将该存储过程设置为启动过程,从存储过程中设置此设置(SET IMPLICIT_TRANSACTIONS ON)。

但是SET IMPLICIT TRANSACTION ON命令是特定于连接的。因此,除了运行启动存储过程的连接之外的任何连接都不会受益于您设置的设置。

另一答案

您可以回滚在事务中执行的语句。而不是提交事务,回滚事务。

如果你已经更新了某些内容并希望回滚这些更新,并且你还没有在(尚未提交的)事务中完成此操作,那么我认为这是幸运的...

(手动修复或恢复备份)

另一答案

提交更新后,您无法仅回滚单个更新。最好的办法是回滚到以前的数据库备份。

另一答案

根据您指定的信息,您最好的恢复机会是通过数据库备份。我不认为你能够回滚你所推动的任何改变,因为你当时显然没有使用交易。

另一答案

简单易行:

标题代码...

Set objMyConn = New ADODB.Connection

Set objMyCmd = New ADODB.Command Set

objMyRecordset = New ADODB.Recordset

On Error GoTo ERRORHAND 

工作代码......

objMyConn.ConnectionString = ConnStr

objMyConn.Open 

码....

'从Excel复制数据'

objMyConn.BeginTrans <-- define transactions to possible be rolled back 

For NewRows = 2 To Rows

objMyRecordset.AddNew 

For NewColumns = 0 To Columns - 1

objMyRecordset.Fields(NewColumns).Value = ActiveSheet.Cells(NewRows, NewColumns + 1)

Next NewColumns objMyRecordset.Update Next NewRows

objMyConn.CommitTrans <- if success, commit them to DB

objMyConn.Close

ERRORHAND:

Success = False 

objMyConn.RollbackTrans <-- here we roll back if error encountered somewhere

LogMessage = "ERROR writing database: " & Err.Description

...

另一答案

如前所述,除了从备份恢复之外,您无能为力。至少现在你已经学会了总是在事务中包装语句,以便在你决定提交之前看看会发生什么。此外,如果您没有数据库备份,这也将教您定期备份数据库。

虽然我们对您当前的问题没有太多帮助...希望这些答案能够确保您将来不再遇到此问题。

另一答案

在这个例子中,我们在查询中运行2行插入,如果所有这些都为true,则运行但如果不是,则不运行任何操作和ROLLBACK

DECLARE @rowcount int  set @rowcount = 0 ; 
BEGIN TRANSACTION [Tran1]
BEGIN TRY 
 insert into [database].[dbo].[tbl1] (fld1) values('1') ;
    set @rowcount = (@rowcount + @@ROWCOUNT); 
 insert into [database].[dbo].[tbl2] (fld1) values('2') ;
    set @rowcount = (@rowcount + @@ROWCOUNT); 

IF @rowcount =  2
  COMMIT TRANSACTION[Tran1]
ELSE
  ROLLBACK TRANSACTION[Tran1]
END TRY
  BEGIN CATCH
  ROLLBACK TRANSACTION[Tran1]
END CATCH

以上是关于如何在SQL Server 2005中回滚UPDATE查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 中回滚或提交事务

如何在 PostgreSQL 中回滚更新

SQL Server 2005 - 无法回滚嵌套事务

在 MS Access 中回滚多个 SQL 更新查询

当其中一个引发错误时,如何从处理程序中回滚所有事务语句?

如何检测用户是不是在 UIScrollView 中回滚了一个视图?