select * from aa
update aa set City='chennai',LastName='vinoth';
ID FirstName LastName City
29 Abcrdrr vinoth chennai
1 John vinoth chennai
2 Joe vinoth chennai
35 raja vinoth chennai
38 Johsdfgn vinoth chennai
J'ai mal mis à jour Lastname, City
colonnes dans toutes les lignes. Maintenant, je veux revenir aux anciennes lignes du tableau.
Utilisation de SQL-Server 2008R2.
Sauf si vous avez une sorte de table d'historique et de déclencheur en place, pour conserver les anciennes valeurs à chaque changement, ou si vous avez fait une copie de la table avant d'exécuter la mise à jour, vous devrez utiliser la dernière sauvegarde qui a été prise avant cette mise à jour. Restaurez-le (comme une base de données temporaire) et extrayez les données.
Vous disposez d'une sauvegarde, non?
BTW, la prochaine fois que vous effectuez une mise à jour, je vous suggère de l'installer comme ceci:
SELECT *
-- UPDATE t SET Column1 = x, Column2 = y
FROM MyTable AS t
WHERE ...
Exécutez d'abord le SELECT
pour voir exactement quelles lignes seront mises à jour. Si nécessaire, ajustez la clause WHERE
pour obtenir les lignes que vous souhaitez cibler. Ensuite, marquez la phrase de UPDATE
jusqu'à la fin et exécutez-la. Il est beaucoup plus sûr d'exécuter une mise à jour "aveugle", comme vous l'avez fait, en oubliant la clause WHERE
(je suppose que c'était le problème).
Encore plus sûr - faites-le d'abord sur une base de données de test :).
Une autre approche consisterait à utiliser fn_dblog
pour vérifier dans les journaux de transactions. C'est un sujet avancé et silencieux, donc je vous renvoie à un excellent article Comment lire et interpréter le journal SQL Server - par Remus Rusan
Pour éviter à l'avenir, vous pouvez toujours utiliser les transactions
BEGIN TRAN
BEGIN TRY
update tbl set City='chennai',LastName='vinoth' from aa AS tbl;
-- if update is what you want then
COMMIT TRAN
END TRY
BEGIN CATCH
-- if NOT then
IF @@TRANCOUNT > 0
ROLLBACK
THROW
END CATCH
Edit: lors de l'écriture de T-SQL complexe, vous devez utiliser un TRY-CATCH
bloquez avec TRANSACTION
afin de ne pas verrouiller les ressources si une exception se produit ou si la requête est annulée. Sinon, si la requête n'est pas complexe, il est préférable de ne pas utiliser de transactions.
De plus, comme l'a mentionné Blaz, il est toujours bon de prendre une sauvegarde de la base de données ou simplement de la table avant d'apporter des modifications à la base de données.