> Tech > Extraire certaines lignes dans un resulset

Extraire certaines lignes dans un resulset

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

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

Les mégatendances cybersécurité et cyber protection 2024

Les mégatendances cybersécurité et cyber protection 2024

L'évolution du paysage des menaces et les conséquences sur votre infrastructure, vos outils de contrôles de sécurité IT existants. EPP, XDR, EDR, IA, découvrez la synthèse des conseils et recommandations à appliquer dans votre organisation.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010