sql server 2005 - full - ¿Cómo puedo deshacer una consulta de ACTUALIZACIÓN en el servidor SQL 2005?
rollback update sql server (10)
Como ya se dijo, no hay nada que puedas hacer excepto restaurar desde una copia de seguridad. Al menos ahora, habrá aprendido a envolver siempre 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 hacer copias de seguridad regulares de su base de datos.
Si bien no hemos sido de mucha ayuda para su problema inmediato ... es de esperar que estas respuestas aseguren que no vuelva a tener este problema en el futuro.
¿Cómo puedo deshacer una consulta de ACTUALIZACIÓN en el servidor SQL 2005?
Necesito hacer esto en SQL, no a través del código.
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 vaya a poder revertir ninguno de los cambios que realizó, ya que aparentemente no estaba usando transacciones en ese momento.
En este ejemplo, ejecutamos la inserción de 2 líneas en la consulta y si todas son verdaderas, se ejecutan, pero si no, no se ejecuta nada y 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
Necesita esta herramienta y puede encontrar la transacción y revertirla.
Puede revertir las declaraciones que ha ejecutado dentro de una transacción. En lugar de cometer la transacción, deshacer la transacción.
Si ha actualizado algo y desea revertir esas actualizaciones, y no lo ha hecho dentro de una transacción (aún no comprometida), entonces creo que es suerte ...
(Reparar manualmente, o restaurar copias de seguridad)
Puedes usar transacciones implícitas para esto
SET IMPLICIT_TRANSACTIONS ON
update Staff set staff_Name=''jas'' where staff_id=7
ROLLBACK
Cuando lo solicite: puede establecer esta configuración ( SET IMPLICIT_TRANSACTIONS ON
) desde un procedimiento almacenado configurando ese procedimiento almacenado como el procedimiento de inicio.
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 almacenado de inicio no se beneficiará de la configuración establecida.
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
Error:
Success = False
objMyConn.RollbackTrans <-- here we roll back if error encountered somewhere
LogMessage = "ERROR writing database: " & Err.Description
...
Tratar
ROLLBACK WORK;
Por lo general funciona
Una vez que se confirma una actualización, no se puede deshacer solo la actualización. Su mejor opción es volver a una copia de seguridad anterior de la base de datos.
begin transaction
// execute SQL code here
rollback transaction
Si ya ejecutó la consulta y desea revertirla, desafortunadamente su única opción real es restaurar una copia de seguridad de la base de datos. Si está utilizando copias de seguridad completas, debería poder restaurar la base de datos a un punto específico en el tiempo.