Bonjour,
J'ai la table T1 suivante :
Je dois inverser les 2 codes pour chaque ref identique, c'est-à-dire obtenir ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 id code ref 55 1 toto 44 2 toto 66 8 titi 77 9 titi
Et tout ce que je possède, ce sont les ref et les codes, pas l'id pour former mes requêtes (car les updates sont générés automatiquement par un autre système)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 id code ref 55 2 toto 44 1 toto 66 9 titi 77 8 titi
Dans un premier temps j'ai voulu faire comme ceci :
Cela ne fonctionne pas car une fois la ligne 1 et 3 exécutée, le select imbriqué des lignes 2 et 4 ne retourne plus une valeur unique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 update T1 set code = 1 where id = (select id from T1 where ref = 'toto') and code = 2) update T1 set code = 2 where id = (select id from T1 where ref = 'toto') and code = 1) update T1 set code = 8 where id = (select id from T1 where ref = 'titi') and code = 9) update T1 set code = 9 where id = (select id from T1 where ref = 'titi') and code = 8)
Je cherche donc un moyen d'exécuter les 4 lignes d'affilées. J'ai cru que j'avais trouvé en utilisant une transaction implicite :
Mais cela me donne la même erreur. Est-ce qu'il s'agit d'une mauvaise utilisation de la transaction implicite (est-ce que je devrais mettre des ";" et/ou des "go" ? et si oui, où s'il vous plaît ?) ou bien est-ce qu'il s'agit d'une mauvaise compréhension des transactions implicites qui ne pourraient de toute manière pas résoudre mon problème ? Si c'est le cas, voyez-vous un moyen pour résoudre mon problème s'il vous plaît ? Sachant que le "challenge" est que je dois rester sur 2 updates pour faire cette inversion et non pas 3.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SET IMPLICIT_TRANSACTIONS ON update T1 set code = 1 where id = (select id from T1 where ref = 'toto') and code = 2) update T1 set code = 2 where id = (select id from T1 where ref = 'toto') and code = 1) update T1 set code = 8 where id = (select id from T1 where ref = 'titi') and code = 9) update T1 set code = 9 where id = (select id from T1 where ref = 'titi') and code = 8) commit SET IMPLICIT_TRANSACTIONS OFF
D'avance merci,
Partager