2009-06-13 9 views
0

J'ai mis à jour ma base de données avec cette requête:Besoin d'aide dans la transaction SQL Rollback

UPDATE suppliers SET contactname = 'Dirk Lucky' 

Donc, toutes les lignes de la table des fournisseurs ont le nom du contact: « Dirk chanceux. »

Comment annuler cette transaction? Je veux restaurer ma colonne de nom de contact dans la table des fournisseurs.

Merci, programmeur

Répondre

4

Sonne comme votre transaction a déjà été engagée. Vous ne pouvez plus le faire rouler.

Votre seule option est la restauration d'une sauvegarde. Vous pouvez peut-être restaurer une sauvegarde en tant que nouvelle base de données, de sorte que vous pouvez copier uniquement les noms de contact et ne pas perdre d'autres modifications.

4

Si le mode FULL est activé, vous pouvez effectuer une restauration à partir du journal. Il y a un excellent article de blog à ce sujet here.

Si ce n'est pas le cas, j'espère sérieusement que vous avez une sauvegarde.

Pour référence future: Quand je fais des mises à jour, j'utilise la syntaxe suivante:

SELECT * 
--UPDATE a SET col = 'val' 
FROM myTable a 
WHERE id = 1234 

De cette façon, vous pouvez voir ce que vous choisissez de mettre à jour en premier. Ensuite, lorsque vous êtes prêt à mettre à jour, il vous suffit de sélectionner UPDATE et d'exécuter la requête. Je me suis souvent pris avec ce tour. Il fonctionne également avec des suppressions, c'est donc un bonus.

+1

Les bons points ici - je fais la même chose de sélection. En outre, j'enveloppe le code dans un début tran aussi, et le commet après que je vois que le nombre approprié de rangées a été mis à jour, mais peut-être que je suis juste paranoïaque. –

0

Espérons que votre base de données utilise le modèle de récupération complète. Si oui:

Vous devez d'abord effectuer une sauvegarde du journal des transactions maintenant.

Vous pouvez ensuite effectuer une restauration de base de données à partir de votre sauvegarde complète + Différences. Une fois cela fait, vous pouvez restaurer le journal des transactions à un moment précis avant votre instruction de mise à jour.

Voir "How to Restore to a point in time"

Comme d'autres l'ont suggéré, vous pouvez restaurer à une autre base de données, et d'appliquer une mise à jour de retour à la base de données en direct si vous souhaitez minimiser les temps d'arrêt.

Espérons que cela a du sens mais faites-moi savoir si vous avez besoin d'aide.

Questions connexes