sql >> Base de Datos >  >> RDS >> Sqlserver

¿Métodos de paginación de SQL Server 2008?

El siguiente procedimiento almacenado de T-SQL es muy implementación eficiente de paginación. EL optimizador de SQL puede encontrar la primera ID muy rápido. Combine esto con el uso de ROWCOUNT y tendrá un enfoque que es eficiente tanto en CPU como en lectura. Para una tabla con una gran cantidad de filas, ciertamente supera cualquier enfoque que haya visto usando una tabla temporal o una variable de tabla.

NB:estoy usando una columna de identidad secuencial en este ejemplo, pero el código funciona en cualquier columna adecuada para la clasificación de páginas. Además, los saltos de secuencia en la columna que se usa no afectan el resultado, ya que el código selecciona una cantidad de filas en lugar de un valor de columna.

EDITAR:si está ordenando una columna con valores potencialmente no únicos (por ejemplo, Apellido), agregue una segunda columna a la cláusula Ordenar por para que los valores de ordenación sean únicos nuevamente.

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