-
Update Max
Bonjour, j'aimerai savoir comment attribuer la valeur max à un champ, en ne faisant qu'un seul update (si c'est possible)
Exemple :
create table #temp
(
Cptr int
)
insert into #temp
(
Cptr
)
values
(
0
)
insert into #temp
(
Cptr
)
values
(
0
)
insert into #temp
(
Cptr
)
values
(
1
)
select
*
from
#temp
update
tmp
set
tmp.Cptr = (select max(Cptr) + 1 from #temp )
from
#temp tmp
where
Cptr = 0
select
*
from
#temp
drop table #temp
Et j'obtiens :
(1 ligne(s) affectée(s))
(1 ligne(s) affectée(s))
(1 ligne(s) affectée(s))
Cptr
-----------
0
0
1
(3 ligne(s) affectée(s))
(2 ligne(s) affectée(s))
Cptr
-----------
2
2
1
(3 ligne(s) affectée(s))
or je voudrais obtenir à la fin :
Cptr
--------------
2
3
1
Je pourrai le faire avec une boucle ou autre, mais comment le faire en une seule instruction ?
Merci.
-
Bonjour,
Il faudrait que tu mettes les balises [ code ] et [ /code ] car c est assez illisible.
Merci
-
En effet, ce résultat est normal.
La requete " select max(Cptr) + 1 from #temp " est exécutée en première et retourne la valeur X+1. Ensuite l'ordre update va inséré X+1 à chaque fois.
Je crois que si tu veux avoir le maximum a chaque update d'une ligne, tu devras sûrement passer par une procedure PL/SQL qui mettra a jour la table ligne à ligne et non pas en une seule fois.
-
Oui, j'avais espéré qu'il existait une petite subtilité qui m'aurait permis de ne pas devoir passer par un moyent détourné.
Je te remerice.
(La prochaine fois, je penserai au balise
-
Avec plaisir.
Je ne sais pas quel SGBD tu utilise, mais je pense pas qu'il doit trop dur réaliser cela avec une fonction.