![](http://lesptitesaffairesdemayl.be/img/images_1/sql-server-2012-pagination-with-order-by-and-offset-fetch.png)
Souvent, les développeurs doivent implémenter la pagination dans les résultats de recherche. La pagination est le processus consistant à diviser les résultats d'une requête en pages numérotées distinctes.
SQL Server 2012 a introduit une nouvelle méthode simple d'implémentation de la pagination à l'aide de OFFSET et FETCH NEXT. Ce processus est en réalité plus rapide que les méthodes complexes précédentes, telles que l'utilisation de row_number. Cette fonctionnalité est quelque peu similaire à la clause MySQL Limit / Offset.
DÉCALAGE: spécifie le nombre de lignes à ignorer avant qu'il ne commence à renvoyer des lignes
FETCH NEXT: le nombre de lignes à afficher dans le résultat
Laissez-nous explorer Récupération Order By Offset dans SQL Server 2012 avec des exemples.
Créez une table appelée COMPANY et remplissez-la avec des données.
SI OBJECT_ID ('COMPANY') N'EST PAS NUL, LA SOCIÉTÉ GO CREATE TABLE (ID INT, CLÉ PRIMAIRE, NOM VARCHAR (25), LOCATION VARCHAR (25)) ALLEZ INSÉRER DANS LES VALEURS DE L'ENTREPRISE (1, 'HCL', 'London' ), (2, «HP», «Bangalore»), (3, «Microsoft», «Bangalore»), (4, «Infosys», «Pune»), (5, «Google», «Londres»), (6, 'GE', 'London'), (7, 'AltiSource', 'New York'), (8, 'Facebook', 'Palo alto'), (9, 'IBM', 'New York') , (10, 'TCS', 'Mumbai') GO SELECT * DE LA SOCIETE GO
Problème 1.1 - Utiliser uniquement OFFSET
SÉLECTIONNER ID, NOM, EMPLACEMENT À PARTIR DE LA COMMANDE DE LA SOCIÉTÉ PAR ID OFFSET 3 ROWS
Dans la requête ci-dessus, nous utilisons uniquement OFFSET. Par conséquent, les trois premières lignes sont ignorées et toutes les lignes restantes sont renvoyées dans un ordre déterminé.
Problème 1.2 - Ignorez les lignes et récupérez les cinq premières lignes.
SÉLECTIONNER ID, NOM, EMPLACEMENT À PARTIR DE LA SOCIÉTÉ ORDER BY ID OFFSET 0 ROWS FETCH NEXT 5 ROWS UNIQUEMENT
Dans la requête ci-dessus, OFFSET 0 ROWS signifie que nous avons sauté zéro et que FETCH NEXT 5 a l'intention de récupérer les cinq prochaines lignes.
Problème 1.3 - Ignorez les cinq premières lignes et récupérez les cinq lignes suivantes.
SÉLECTIONNER ID, NOM, EMPLACEMENT À PARTIR DE LA SOCIÉTÉ ORDER BY ID OFFSET 5 ROWS FETCH NEXT 5 ROWS UNIQUEMENT
Ici, nous sautons les cinq premières lignes et récupérons les cinq lignes suivantes.
Le résultat ci-dessus peut être obtenu à l'aide de SQL Server 2005/2008 à l'aide de row_number et de la table dérivée.
SÉLECTIONNER ID, NOM, EMPLACEMENT DE (SELECT ID, NOM, EMPLACEMENT, ROW_NUMBER () OVER (ORDER BY ID) de la société c) DT WHERE DT.rownum ENTRE 6 ET 10
Comparaison des performances entre OFFSET FETCH et ROW_NUMBER
L’approche OFFSET FETCH a pris 0.003294et l’approche row_number a pris 0.0033038. Cela montre la nouvelle approche OFFSET FETCH dans SQL Server 2012 est plus rapide.
Problème 1.4 - Utilisation de variables avec OFFSET et FETCH
DÉCLARER @OffSetRows AS INT = 5 DÉCLARER @FetchRows AS INT = 5 SÉLECTIONNER ID, NOM, EMPLACEMENT À PARTIR DE LA COMMANDE DE LA COMPAGNIE PAR ID OFFSET @OffSetRows ROWS FETCH SUIVANT @FetchRows ROWS UNIQUEMENT
Ceci est identique au problème 1.3, mais nous utilisons ici des variables pour stocker les valeurs OFFSET et FETCH.