2010-10-07 6 views
0

Supposons que j'ai une table avec le schéma suivant:Table de récupération Question

tableid
field1
field2
.....

J'ai deux copies de ma base de données (sauvegarde et production). Sur l'instance de production, une requête a été accidentellement exécuté qui a fait ce qui suit:

Update table set field2 = null where field1 = 'x'; 

Je suis en train d'annuler cette requête sur la base des données stockées dans l'instance de sauvegarde (où la déclaration mauvaise mise à jour n'a pas été exécutée).

De quelles instructions SQL aurais-je besoin pour s'exécuter sur la base de données de sauvegarde afin d'extraire le tableId et les valeurs de field2? Comment puis-je convertir cela en instructions de mise à jour appropriées pour corriger la production? Il pourrait y avoir quelques lignes impactées par la requête.

Je pense que je pourrais sélectionner les valeurs effacées de la sauvegarde avec la requête suivante:

Select tableId, field2 where field1 = 'x'; 

Cependant, je suis à une perte sur la façon de convertir en une déclaration de mise à jour facile. Toute idée (ou de meilleures idées) serait appréciée.

Répondre

0

Vous aurez besoin des données à mettre à jour dans la même base de données, alors faites-le dans votre sauvegarde où field1 = 'x', enregistrez-le dans une table temporaire et copiez-le dans votre table de production.

Vous aurez également besoin d'une sorte de clé primaire entre ces deux tables - si vous ne l'avez pas, comment savez-vous quel field2 doit être mis à jour?

Par exemple, si votre table avait

field1 field2 
x  5 
x  9 
x  null 
y  5 

et a maintenant

field1 field2 
x  null 
x  null 
x  null 
y  5 

et s'il y a d'autres domaines, comment allez-vous distinguer le bon dossier x/5 de x/9, et plus important encore, à partir du field2 qui était nul avant la mise à jour?

Si vous avez une sorte de clé primaire, vous pouvez mettre à jour table1 (field2) que de sélectionner field2 de backuptable où table1.field1 = backuptable

+0

deux followups: la tableid est une clé primaire unique entier et les deux les bases de données sont sur des machines différentes alors suggérez-vous un vidage de la table sur la sauvegarde pour le déplacer dans une table sur la production? – Visitor

+0

Oui, effectuez une copie temporaire de la table de sauvegarde dans la base de données de production. En fait, un meilleur choix consiste à faire une copie temporaire de la table de production brisée dans la sauvegarde, et y travailler. Une fois que c'est bon, puis copiez ces données en production. – thursdaysgeek

Questions connexes