|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Futur Membre du Club
![]() Stéphane BouvetChef de projet MOA Inscription : mai 2011 Messages : 40 ![]() |
Bonsoir,
Je voudrais affecter à une liste lambda un numéro automatique qui commencerait à X, incrémenté par pas de 1. Exemple : 300 lignes auxquelles je dois affecter un numéro (peu importe l'ordre) de 1300 à 1600. Aujourd'hui la procédure qui le fait passe par un curseur (dont je voudrais me débarrasser), mais je suis persuadé que les instances compétentes ici bas me proposeraient bien un petit SELECT qui ajouterait automatiquement 1 au précédent (je suis sous SQL SERVER 2000 donc le ROW_NUMBER est proscrit...) Merci d'avance ! |
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour,
En effet, un row_number aurait bien fait l'affaire... sans row_number, ni CTE, je ne vois pas de solution sans table temporaire : 1/ créez un table temporaire, contenant le résultat de votre requête, et une colonne supplémentaire "Rang" initialement à NULL 2/ affectez le rang : Code SQL :
3/ et zou ! Il y a peut être mieux (si quelqu'un est plus inspiré que moi...) mais je pense que ce sera toujours mieux qu'un curseur... |
||
|
|
00
|
|
|
#3 | ||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Bonjour,
Il suffit en fait de rajouter un CASE, s'il y a plus de lignes que la plage à mettre à jour : Code :
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||
|
00
|
|
|
#4 |
|
Futur Membre du Club
![]() Stéphane BouvetChef de projet MOA Inscription : mai 2011 Messages : 40 ![]() |
Merci pour ces réponses !
Ce qui est curieux dans l'exemple de aieeeuuuuu, c'est que si l'on commence à 1000, le premier a pour ticket le numéro 1001 alors que l'update précise @n = @n + 1 après l'affectation de @n au champ ticket ? |
|
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
en fait, ce n'est pas la façon d’écrire la requête, mais le moteur qui détermine l'ordre d'affectation...
Et le moteur à décidé, comme le montre le plan d’exécution, d’incrémenter @N avant de mettre à jour la colonne... Bah, initialisons @N = 1299 |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com