Bonjour,
J'ai la table T1 suivante :
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
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     2          toto
44     1          toto
66     9          titi
77     8          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)
Dans un premier temps j'ai voulu faire comme ceci :
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)
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.
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 :
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
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.
D'avance merci,