Q: Je sais comment utiliser la clause TOP dans une instruction SELECT pour extraire les n premières lignes d'un jeu de résultats, mais j'ai aussi besoin de renvoyer le second jeu de n lignes. Ainsi, plutôt que de renvoyer les 10 premières lignes, je veux renvoyer les lignes 11 à
Extraire certaines lignes dans un resulset
20.
Comment extraire un second jeu
de lignes ?
R: SQL Server est un langage à base de
jeux et donc il ne permet pas de bien
travailler avec des lignes spécifiques
dans un jeu de résultats. Il est facile
d’utiliser un curseur T-SQL côté serveur pour résoudre le problème de
get rows 11-20, mais je déconseille
cette solution. La plupart des spécialistes
SQL conviennent que les curseurs
T-SQL côté serveur sont très inefficaces.
Bien que les curseurs T-SQL
ne posent pas de problèmes quand
vous travaillez avec une requête exécutée
peu fréquemment et n’opérant pas
sur de nombreuses lignes, je vous
conseille d’éviter les curseurs T-SQL
côté serveur et de leur préférer, quand
c’est possible, des solutions à base de
jeux.
Une solution à base de jeux est une
solution que l’on peut exprimer en utilisant
des commandes T-SQL individuelles
qui opèrent sur une suite de
lignes pour renvoyer un jeu de résultats.
Dans ce cas, on n’a pas besoin de
recourir à un curseur T-SQL.
Il est parfois difficile de prendre un
problème qui se prête à une solution à
base de curseur itératif, ligne à ligne, et
de créer une solution T-SQL à base de
jeux. Mais on peut généralement trouver
une manière élégante de résoudre
le problème. Le code T-SQL du listing
1 contient un exemple de la manière
dont on peut renvoyer les lignes numérotées
de 1 à 10 à partir d’un jeu de
résultats, sans utiliser un curseur
T-SQL.
La requête du listing 2 montre les
10 commandes de plus faible montant,
pour un fournisseur donné. Cette requête
est peut-être un peu compliquée
à suivre si vous débutez en SQL.
Nous allons donc la parcourir rapidement.
Vous réutilisez la requête du listing
1 deux fois dans le listing 2. La première
fois pour créer une liste de 10 ID
de commande de plus faible montant,
que vous utilisez ensuite comme la
sous-requête soumise à la clause NOT
IN. La requête externe dans le listing 2
est essentiellement la même requête
que dans le listing 1, à cela près que
vous filtrez vers l’extérieur les ID de
commande déjà comptées dans la
sous-requête.
Vous avez le choix entre plusieurs
opérations à base de jeux (set-based)
pour accomplir cette même tâche.
Pour cette réponse, je n’ai pas cherché
à optimiser la requête et la clause NOT
IN n’est pas toujours la construction
de requête la plus efficace. Mais cette
construction permet de suivre la logique
et la requête plus facilement
qu’avec d’autres formulations de requêtes.
Elle facilite également la démonstration
de l’aspect principal de
cette réponse – éviter les opérations
de curseur T-SQL ligne à ligne.
Téléchargez cette ressource
Microsoft 365 Tenant Resilience
Face aux failles de résilience des tenants M365 (configurations, privilèges, sauvegarde). Découvrez 5 piliers pour durcir, segmenter et surveiller vos environnements afin de limiter l’impact des attaques. Prioriser vos chantiers cyber et améliorer la résilience de vos tenants Microsoft 365.
Les articles les plus consultés
- Partager vos images, vidéos, musique et imprimante avec le Groupe résidentiel
- Chiffrements symétrique vs asymétrique
- N° 2 : Il faut supporter des langues multiples dans SharePoint Portal Server
- Afficher les icônes cachées dans la barre de notification
- Cybersécurité Active Directory et les attaques de nouvelle génération
Les plus consultés sur iTPro.fr
- ADI, l’infrastructure de données de Scality pensée pour l’ère de l’IA et de la souveraineté
- Les coûts cachés des merge requests générées par l’IA
- WatchGuard lance Rai, une IA agentique taillée pour les MSP
- Mythos révèle les limites d’un Zero Trust centré sur le réseau
Articles les + lus
Analyse Patch Tuesday Mai 2026
Les coûts cachés des merge requests générées par l’IA
Femmes et métiers de la tech : une attractivité réelle freinée par des stéréotypes persistants
Moderniser le développement logiciel : de la fragmentation à l’intégration
Analyse Patch Tuesday Avril 2026
À la une de la chaîne Tech
- Analyse Patch Tuesday Mai 2026
- Les coûts cachés des merge requests générées par l’IA
- Femmes et métiers de la tech : une attractivité réelle freinée par des stéréotypes persistants
- Moderniser le développement logiciel : de la fragmentation à l’intégration
- Analyse Patch Tuesday Avril 2026
