Published on

February 18, 2017

Entendiendo la paginación en SQL Server

La paginación es un requisito común en muchas aplicaciones que manejan conjuntos de datos grandes. Permite a los usuarios ver los datos en fragmentos más pequeños y manejables en lugar de cargar todos los datos de una vez. En SQL Server, se puede lograr la paginación utilizando diversas técnicas dependiendo de la versión de SQL Server que se esté utilizando.

Paginación en SQL Server 2000

En SQL Server 2000, se puede lograr la paginación utilizando tablas temporales y la función ROW_NUMBER. Aquí tienes un ejemplo:

USE AdventureWorks
GO
DECLARE @StartRow INT
DECLARE @EndRow INT
SET @StartRow = 120
SET @EndRow = 140

CREATE TABLE #tables (RowNumber INT IDENTITY(1,1),
                FirstName VARCHAR(100), LastName VARCHAR(100),
                EmailAddress VARCHAR(100))

INSERT INTO #tables (FirstName, LastName, EmailAddress)
    SELECT PC.FirstName, PC.LastName, PC.EmailAddress
    FROM Person.Contact PC
    ORDER BY FirstName, LastName, EmailAddress

SELECT FirstName, LastName, EmailAddress
    FROM #tables
    WHERE RowNumber > @StartRow
        AND RowNumber < @EndRow

DROP TABLE #tables
GO

Paginación en SQL Server 2005

En SQL Server 2005, la función ROW_NUMBER se puede utilizar directamente en la consulta para lograr la paginación. Aquí tienes un ejemplo:

USE AdventureWorks
GO
DECLARE @StartRow INT
DECLARE @EndRow INT
SET @StartRow = 120
SET @EndRow = 140

SELECT FirstName, LastName, EmailAddress
    FROM (
    SELECT PC.FirstName, PC.LastName, PC.EmailAddress,
                ROW_NUMBER() OVER(
            ORDER BY PC.FirstName, PC.LastName,PC.ContactID) AS RowNumber
        FROM Person.Contact PC) PersonContact
    WHERE RowNumber > @StartRow
        AND RowNumber < @EndRow
    ORDER BY FirstName, LastName, EmailAddress
GO

Paginación en SQL Server 2012 y posteriores

A partir de SQL Server 2012, está disponible un método más eficiente de paginación utilizando las cláusulas OFFSET y FETCH NEXT. Aquí tienes un ejemplo:

USE AdventureWorks2008R2
GO
DECLARE @RowsPerPage INT = 10, @PageNumber INT = 5

SELECT *
FROM Sales.SalesOrderDetail
ORDER BY SalesOrderDetailID
OFFSET @PageNumber*@RowsPerPage ROWS
FETCH NEXT 10 ROWS ONLY
GO

Estos ejemplos demuestran diferentes enfoques para lograr la paginación en SQL Server. Es importante elegir el método adecuado en función de la versión de SQL Server que se esté utilizando para garantizar un rendimiento óptimo.

Para más información, puedes consultar los siguientes artículos:

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.