Pregunta

¿Cómo puedo deshacer una consulta UPDATE en SQL Server 2005?

Necesito hacer esto en SQL, no a través de código.

¿Fue útil?

Solución

begin transaction

// execute SQL code here

rollback transaction

Si ya ha ejecutado la consulta y quiere rodar de nuevo, por desgracia, su única opción es restaurar una copia de seguridad de base de datos. Si está utilizando copias de seguridad completas, entonces usted debería ser capaz de restaurar la base de datos a un punto específico en el tiempo.

Otros consejos

Es necesario esta herramienta y se puede encontrar la transacción y revertirla.

ApexSQL Log

Puede utilizar transacciones implícitas para este

SET IMPLICIT_TRANSACTIONS ON

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

ROLLBACK

A medida que request-- Puede establecer esta configuración (SET IMPLICIT_TRANSACTIONS ON) de un procedimiento almacenado mediante el establecimiento de ese procedimiento almacenado como el procedimiento de puesta en marcha.

Pero comando SET IMPLICIT TRANSACTION ON es específico de la conexión. Por lo que cualquier conexión que no sea la que se ejecuta el procedimiento almacenado puesta en marcha no se beneficiarán de la configuración que ha establecido.

Puede deshacer las declaraciones que ha ejecutado dentro de una transacción. En vez de cometer la transacción, deshacer la transacción.

Si ha actualizado algo y querer deshacer esos cambios, y no se ha hecho esto dentro de una transacción (aún no comprometidos-), entonces yo creo que es a pesar de suerte ...

(reparar manualmente, o, restaurar copias de seguridad)

Una vez que se comete una actualización no se puede deshacer sólo la sola actualización. Su mejor apuesta es a volver a una copia de seguridad anterior de la base de datos.

A partir de la información que ha especificado, su mejor posibilidad de recuperación es a través de una copia de seguridad de base de datos. No creo que va a ser capaz de deshacer cualquiera de esos cambios que empujó a través ya que al parecer no estaba utilizando las transacciones en el momento.

simple de hacer:

código de cabecera ...

Set objMyConn = New ADODB.Connection

Set objMyCmd = New ADODB.Command Set

objMyRecordset = New ADODB.Recordset

On Error GoTo ERRORHAND 

Código de Trabajo ...

objMyConn.ConnectionString = ConnStr

objMyConn.Open 

código ....

'copiar datos de 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

...

Como ya se ha dicho que no hay nada que puedas hacer excepto restaurar desde una copia de seguridad. Por lo menos ahora se han aprendido para envolver siempre declaraciones en una transacción para ver lo que sucede antes de decidirse a comprometerse. Además, si usted no tiene una copia de seguridad de su base de datos este también le enseñará a hacer copias de seguridad de su base de datos.

Si bien no hemos sido de mucha ayuda para su problema imediate ... espero que estas respuestas se asegurará de que no se quede en este problema en el futuro.

En este ejemplo nos encontramos 2 inserto en línea consulta y si todos ellos cierto que corremos, pero si no hay nada y ejecutar 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

Trate

ROLLBACK WORK;

Por lo general, funciona

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top