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
Guide de Cyber-résilience pour Microsoft 365
La violation de votre tenant M365 va au-delà d’un simple incident de cybersécurité. Elle peut entraîner une interruption opérationnelle généralisée, des perturbations commerciales et une exposition de vos données sensibles. Découvrez les méthodes et technologies pour évaluer, comparer et renforcer votre posture de sécurité Microsoft 365.
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Cloud 2026 : 5 tendances à anticiper pour les PME françaises
- Les DSI français face au défi de l’IA : ambitions élevées, marges de manœuvre limitées
- Connectivité et impression sans contrainte : repenser la gestion documentaire en 2026
- Souveraineté numérique : réinvestir les fondations pour sortir de la dépendance à Microsoft
Articles les + lus
Alliée ou menace ? Comment l’IA redessine le paysage cyber
CES 2026 : l’IA physique et la robotique redéfinissent le futur
Les 3 prédictions 2026 pour Java
Semi-conducteurs : comment l’Irlande veut contribuer à atténuer la pénurie mondiale de puces
Face à l’urgence écologique, l’IT doit faire sa révolution
À la une de la chaîne Tech
- Alliée ou menace ? Comment l’IA redessine le paysage cyber
- CES 2026 : l’IA physique et la robotique redéfinissent le futur
- Les 3 prédictions 2026 pour Java
- Semi-conducteurs : comment l’Irlande veut contribuer à atténuer la pénurie mondiale de puces
- Face à l’urgence écologique, l’IT doit faire sa révolution
