Maison > base de données > tutoriel mysql > Comment implémenter la pagination avec OFFSET et FETCH ou ROW_NUMBER dans SQL Server ?

Comment implémenter la pagination avec OFFSET et FETCH ou ROW_NUMBER dans SQL Server ?

Patricia Arquette
Libérer: 2025-01-10 21:02:42
original
326 Les gens l'ont consulté

How to Implement Pagination with OFFSET and FETCH or ROW_NUMBER in SQL Server?

Implémentation de la pagination SQL : utilisation des mots-clés SKIP et TAKE

Description du problème

Vous traitez une requête qui récupère les messages du forum récemment discutés en fonction de l'entrée la plus récente pour chaque message. Vous souhaitez étendre cette requête pour prendre en charge la pagination, en particulier pour permettre à l'utilisateur de récupérer une plage spécifique de publications, telle que « les 10e à 20e publications actives les plus récentes ».

Réponse

SQL Server 2012 et supérieur

Dans SQL Server 2012 et versions ultérieures, vous pouvez facilement implémenter la pagination à l'aide des mots-clés OFFSET et FETCH :

<code class="language-sql">SELECT PostId
FROM (
    SELECT PostId, MAX(Datemade) AS LastDate
    FROM dbForumEntry
    GROUP BY PostId
) SubQueryAlias
ORDER BY LastDate DESC
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;</code>
Copier après la connexion

Cette requête ignore les 10 premières lignes (décalage) et obtient les 10 lignes suivantes.

SQL Server 2008

Dans SQL Server 2008, vous pouvez utiliser les techniques suivantes :

<code class="language-sql">DECLARE @Start INT
DECLARE @End INT
SELECT @Start = 10, @End = 20;

WITH PostCTE AS (
    SELECT PostId, MAX(Datemade) AS LastDate
        ,ROW_NUMBER() OVER (ORDER BY PostId) AS RowNumber
    FROM dbForumEntry
    GROUP BY PostId
)
SELECT PostId, LastDate
FROM PostCTE
WHERE RowNumber BETWEEN @Start + 1 AND @End
ORDER BY RowNumber;</code>
Copier après la connexion

Cette requête utilise une expression de table commune (CTE) pour générer des numéros de ligne pour chaque publication. La clause WHERE filtre ensuite les résultats pour inclure uniquement les publications dans la plage spécifiée, et la clause ORDER BY garantit que les publications sont renvoyées dans l'ordre croissant par PostId.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal