Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Métodos de paginação do SQL Server 2008?


O procedimento armazenado T-SQL a seguir é um procedimento muito implementação eficiente de paginação. O otimizador SQL pode encontrar o primeiro ID muito rapidamente. Combine isso com o uso de ROWCOUNT e você terá uma abordagem que é eficiente em termos de CPU e de leitura. Para uma tabela com um grande número de linhas, certamente supera qualquer abordagem que tenha visto usando uma tabela temporária ou variável de tabela.

NB:estou usando uma coluna de identidade sequencial neste exemplo, mas o código funciona em qualquer coluna adequada para classificação de páginas. Além disso, as quebras de sequência na coluna que está sendo usada não afetam o resultado, pois o código seleciona um número de linhas em vez de um valor de coluna.

EDIT:Se você estiver classificando em uma coluna com valores potencialmente não exclusivos (por exemplo, LastName), adicione uma segunda coluna à cláusula Order By para tornar os valores de classificação exclusivos novamente.
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