web-dev-qa-db-fra.com

Comment puis-je annuler une requête UPDATE dans SQL Server 2005?

Comment puis-je annuler une requête UPDATE dans SQL Server 2005?

J'ai besoin de le faire en SQL, pas avec du code.

17
Guddu
begin transaction

// execute SQL code here

rollback transaction

Si vous avez déjà exécuté la requête et souhaitez la restaurer, votre seule option réelle est malheureusement de restaurer une sauvegarde de base de données. Si vous utilisez des sauvegardes complètes, vous devriez pouvoir restaurer la base de données à un moment donné.

32
Adam Robinson

Vous avez besoin de cet outil et vous pouvez trouver la transaction et l’inverser.

Journal ApexSQL

28
rick schott

Vous pouvez utiliser transactions implicites pour cela

SET IMPLICIT_TRANSACTIONS ON

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

ROLLBACK

Lorsque vous le demandez, vous pouvez CONFIGURER ce paramètre (SET IMPLICIT_TRANSACTIONS ON) à partir d'une procédure stockée en définissant cette procédure stockée comme procédure de démarrage.

Mais la commande SET IMPLICIT TRANSACTION ON est spécifique à la connexion. Ainsi, toute connexion autre que celle exécutant la procédure stockée de démarrage ne bénéficiera pas du paramètre que vous avez défini.

6
tarzanbappa

Vous pouvez annuler les instructions que vous avez exécutées dans une transaction ..__ Au lieu de valider la transaction, annulez la transaction.

Si vous avez mis à jour quelque chose et que vous voulez annuler ces mises à jour, et que vous ne l'avez pas fait dans une transaction (non encore validée), alors je pense que c'est par hasard ...

(Réparer ou restaurer manuellement les sauvegardes)

5

Une fois qu'une mise à jour est validée, vous ne pouvez plus annuler une seule mise à jour. Votre meilleur choix est de revenir à une sauvegarde précédente de la base de données. 

1
JoshBerke

Simple à faire: 

code d'en-tête ...

Set objMyConn = New ADODB.Connection

Set objMyCmd = New ADODB.Command Set

objMyRecordset = New ADODB.Recordset

On Error GoTo ERRORHAND 

Code de travail ... 

objMyConn.ConnectionString = ConnStr

objMyConn.Open 

code.... 

'Copier les données à partir d'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

...

1
Rick B

Parmi les informations que vous avez spécifiées, votre meilleure chance de récupération réside dans une sauvegarde de base de données. Je ne pense pas que vous serez en mesure d’annuler l’un quelconque des changements que vous avez mis en place puisque vous n’utilisiez apparemment pas de transactions à l’époque.

1
TheTXI

Comme déjà indiqué, vous ne pouvez rien faire à part restaurer à partir d’une sauvegarde. Au moins maintenant, vous aurez appris à envelopper les instructions dans une transaction pour voir ce qui se passe avant de décider de valider. En outre, si vous ne possédez pas de sauvegarde de votre base de données, vous apprendrez également à effectuer des sauvegardes régulières de votre base de données. 

Bien que nous n'ayons pas beaucoup aidé pour votre problème immédiat ... espérons que ces réponses vous éviteront de vous retrouver dans ce problème à l'avenir. 

0
mezoid

dans cet exemple, nous exécutons une insertion de 2 lignes dans une requête et si toutes les réponses sont vraies, elles sont exécutées, mais sinon aucune exécution et 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