2017-10-09 4 views
-1

J'ai utilisé l'instruction de mise à jour sur une colonne et maintenant je veux l'inverser. Y a-t-il un moyen de défaire cela?Comment annuler une fonction de mise à jour SQL Server?

Ce sont les données originales

Name Score 
John 15 
John 15 

J'ai utilisé cette requête:

UPDATE T1 
SET [score] = [score]+'na' 
WHERE (name = ‘john’) 

qui m'a donné ceci:

Name Score 
John 15na 
John 15na 

Puis-je annuler cela et supprimer le na? Je veux que le score soit flottant.

+2

Avez-vous essayé 'rollback'? –

+0

pas encore, pouvez-vous donner un exemple? – luanstat

+0

Je viens de supposer que vous connaissez 'SQL'. Dans chaque DBS, vous avez quelque chose comme 'commit' qui fait que les changements de données sont persistants et qui annulent tous les changements depuis la dernière validation (certaines instructions font des autocommits). –

Répondre

4

Annuler en retirant la valeur ajoutée na:

UPDATE T1 
SET [score] = LEFT([score],LEN([score])-2) 
where (name = 'john') 
+0

@justiceorjustus Bon point, mais AFAICT supprimant le 'na' de la chaîne devrait en faire un flottant même s'il se trouvait dans un champ VARCHAR. Je ne suis pas sûr que l'OP veut réellement faire de la colonne un type FLOAT. S'il le fait, je vais ajouter quelque chose à faire. –

1

Vous pouvez faire comme TT. a mentionné et mis à jour à sa valeur d'origine manuellement ou ROLLBACK. Si IMPLICIT_TRANSACTIONS est défini sur, vous pouvez ROLLBACK en exécutant ROLLBACK TRANSACTION;. Toutefois, si EXPLICIT_TRANSACTIONS sont allumés alors vous devez spécifier un BEGIN TRANSACTION comme si ...

BEGIN TRANSACTION; 

UPDATE T1 
SET [score] = [score]+'na' 
where (name = ‘john’); 

--if unhappy with results.. 
ROLLBACK TRANSACTION; 

ou mis IMPLICIT_TRANSACTIONS sur si elle est pas déjà si vous souhaitez ROLLBACK sans spécifier BEGIN TRANSACTION chaque fois.

SET IMPLICIT_TRANSACTIONS ON; 

UPDATE T1 
SET [score] = [score]+'na' 
where (name = ‘john’); 

--if unhappy with results.. 
ROLLBACK TRANSACTION;