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:
- SQL SERVER – Trucos para el desplazamiento de filas y paginación en varias versiones de SQL Server
- SQL SERVER – Comparación de rendimiento de la paginación del lado del servidor en SQL Server 2012
- SQL SERVER – Comparación de técnicas de consulta de paginación T-SQL 2005 (OVER y ROW_NUMBER()) – CTE vs. Tabla derivada
- SQL SERVER – Comparación de técnicas de consulta de paginación T-SQL – SQL 2000 vs SQL 2005
- SQL SERVER – Paginación del lado del servidor en SQL Server 2012 – Una mejor alternativa
- SQL SERVER – Desplazamiento de filas en SQL Server para diferentes versiones