Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Méthodes de pagination SQL Server 2008 ?

La procédure stockée T-SQL suivante est très mise en œuvre efficace de la pagination. L'optimiseur SQL peut trouver le premier ID très rapidement. Combinez cela avec l'utilisation de ROWCOUNT et vous obtenez une approche à la fois efficace en termes de CPU et de lecture. Pour une table avec un grand nombre de lignes, cela surpasse certainement toutes les approches que j'ai vues en utilisant une table temporaire ou une variable de table.

NB :J'utilise une colonne d'identité séquentielle dans cet exemple, mais le code fonctionne sur n'importe quelle colonne adaptée au tri des pages. De plus, les sauts de séquence dans la colonne utilisée n'affectent pas le résultat car le code sélectionne un certain nombre de lignes plutôt qu'une valeur de colonne.

EDIT :si vous triez sur une colonne avec des valeurs potentiellement non uniques (par exemple, LastName), ajoutez une deuxième colonne à la clause Order By pour rendre les valeurs de tri à nouveau uniques.

CREATE  PROCEDURE dbo.PagingTest
(
    @PageNumber int,
    @PageSize int
)
AS

DECLARE @FirstId int, @FirstRow int

SET @FirstRow = ( (@PageNumber - 1) * @PageSize ) + 1
SET ROWCOUNT @FirstRow

-- Add check here to ensure that @FirstRow is not
-- greater than the number of rows in the table.

SELECT   @FirstId = [Id]
FROM     dbo.TestTable
ORDER BY [Id]

SET ROWCOUNT @PageSize

SELECT   *
FROM     dbo.TestTable
WHERE    [Id] >= @FirstId
ORDER BY [Id]

SET ROWCOUNT 0
GO