如何在SQL Server 2005中回滚UPDATE查询?
我需要在SQL中执行此操作,而不是通过代码执行此操作。
答案 0 :(得分:32)
begin transaction
// execute SQL code here
rollback transaction
如果您已经执行了查询并希望将其回滚,那么您唯一真正的选择就是恢复数据库备份。如果您正在使用完全备份,那么您应该能够将数据库还原到特定时间点。
答案 1 :(得分:28)
您需要此工具,您可以找到该交易并将其撤销。
答案 2 :(得分:6)
您可以对此
使用隐式交易SET IMPLICIT_TRANSACTIONS ON
update Staff set staff_Name='jas' where staff_id=7
ROLLBACK
根据您的要求 - 您可以通过将该存储过程设置为启动过程,从存储过程中设置此设置(SET IMPLICIT_TRANSACTIONS ON
)。
但SET IMPLICIT TRANSACTION ON
命令是特定于连接的。因此,除了运行启动存储过程的连接之外的任何连接都不会受益于您设置的设置。
答案 3 :(得分:5)
您可以回滚在事务中执行的语句。 而不是提交事务,回滚事务。
如果您已经更新了某些内容并希望回滚这些更新,并且您还没有在(尚未提交的)事务中执行此操作,那么我认为这是运气...
(手动修复或恢复备份)
答案 4 :(得分:1)
提交更新后,您无法回滚单个更新。最好的办法是回滚到以前的数据库备份。
答案 5 :(得分:1)
根据您指定的信息,您最好的恢复机会是通过数据库备份。我不认为你能够回滚你所推动的任何改变,因为你当时显然没有使用交易。
答案 6 :(得分:1)
简单易行:
标题代码......
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
...
答案 7 :(得分:0)
如前所述,除了从备份恢复之外,您无能为力。至少现在你已经学会了总是在事务中包装语句,以便在你决定提交之前看看会发生什么。此外,如果您没有数据库备份,这也将教您定期备份数据库。
虽然我们对您的中级问题没有太多帮助...希望这些答案能确保您在将来再次遇到此问题。
答案 8 :(得分:0)
在这个例子中,我们在查询中运行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
答案 9 :(得分:-3)
尝试
ROLLBACK WORK;
通常有效