¿Cómo puedo deshacer una consulta UPDATE en SQL Server 2005?
-
05-09-2019 - |
Pregunta
¿Cómo puedo deshacer una consulta UPDATE en SQL Server 2005?
Necesito hacer esto en SQL, no a través de código.
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.
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