2009-04-06 15 views
17

¿Cómo puedo deshacer una consulta de actualización en SQL Server 2005?¿Cómo puedo deshacer una consulta de actualización en SQL Server 2005?

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

+1

¿Qué quiere decir con la actualización? ¿puedes acercarte un poco más a esta pregunta? –

+1

he actualizado una tabla que fue mi terrible error ... en lugar de actualizar una sola fila ... con mi descuido he actualizado todas las filas ... ¿cómo puedo retrotraer esto ... por favor ayuda ..... – Guddu

+1

Necesitas Registro de ApexSQL. –

Respuesta

5

Puede deshacer las instrucciones que ha ejecutado dentro de una transacción. En lugar de comprometer la transacción, deshaga 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 suerte ... aunque

(reparar manualmente o, restaurar copias de seguridad)

30
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 debería poder restaurar la base de datos a un punto específico en el tiempo.

+1

¿Qué quieres decir con Copias de seguridad completas, si hago una copia de seguridad de la base de datos a diario, soy nuevo en esto? – stom

1

Una vez que se ha confirmado una actualización, no puede deshacer solo la actualización. Su mejor opción es retroceder a una copia de seguridad previa de la base de datos.

1

A partir de la información que ha especificado, su mejor oportunidad de recuperación es a través de una copia de seguridad de la base de datos. No creo que pueda deshacer ninguno de esos cambios que realizó porque aparentemente no estaba usando transacciones en ese momento.

28

Necesita esta herramienta y puede encontrar la transacción e invertirla.

ApexSQL Log

+1

"Ooops: ¡ojalá pueda deshacer esa declaración de actualización sin una cláusula where !? ApexSQL Log tiene la capacidad de ROLLBACK transacciones para bases de datos SQL Server". Gran linea! –

+2

ese peaje parece genial, pero costó 2000 $ –

0

Como ya se ha dicho que no hay nada que puedas hacer excepto restaurar desde una copia de seguridad. Al menos ahora habrá aprendido a ajustar las declaraciones en una transacción para ver qué sucede antes de decidir comprometerse. Además, si no tiene una copia de seguridad de su base de datos, esto también le enseñará a realizar copias de seguridad periódicas de su base de datos.

Si bien no hemos sido de mucha ayuda para su problema de importación ... espero que estas respuestas le garanticen que no se encontrará nuevamente con este problema en el futuro.

-3

Trate

ROLLBACK WORK; 

lo general, funciona

1

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' ERRORHAND

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 

:

Success = False 

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

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

...

6

Puede utilizar transacciones implícitas para este

SET IMPLICIT_TRANSACTIONS ON 

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

ROLLBACK 

Como 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 encendido.

Pero el comando SET IMPLICIT TRANSACTION ON es específico de la conexión. Por lo tanto, cualquier conexión que no sea la que ejecuta el procedimiento de inicio almacenado no se beneficiará de la configuración establecida.

0

en este ejemplo de ejecución 2 línea de insertar en la consulta y si todos ellos cierto que correr, 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 
Cuestiones relacionadas