Published on

September 29, 2022

Implementando la paginación de SQL Server con OFFSET y FETCH

SQL Server 2012 introdujo una nueva característica llamada OFFSET y FETCH, que te permite obtener solo una página o ventana específica de resultados de un conjunto de resultados completo. Esta característica es particularmente útil al implementar la paginación de SQL Server, donde necesitas mostrar al cliente solo un número limitado de filas a la vez.

Echemos un vistazo a un ejemplo sencillo para entender cómo utilizar la característica OFFSET y FETCH en SQL Server 2012. En el siguiente código T-SQL, seleccionamos el BusinessEntityID, PersonType y el nombre completo de la tabla Person.Person en la base de datos AdventureWorks2008R2. Luego ordenamos los resultados por BusinessEntityID y utilizamos los comandos OFFSET y FETCH para saltar las primeras 100 filas y obtener las siguientes 5 filas:

USE AdventureWorks2008R2
GO
SELECT 
  BusinessEntityID,
  PersonType,
  FirstName + ' ' + MiddleName + ' ' + LastName 
FROM Person.Person
ORDER BY BusinessEntityID ASC
OFFSET 100 ROWS 
FETCH NEXT 5 ROWS ONLY
GO

La salida de esta consulta mostrará que se descartaron las primeras 100 filas y se obtuvieron las siguientes 5 filas del conjunto de registros completo.

Ahora, exploremos cómo implementar la paginación de SQL utilizando la característica OFFSET y FETCH en un procedimiento almacenado. En el siguiente ejemplo, creamos un procedimiento almacenado llamado ExampleUsageOfSQLServerDenaliPagingFeature. Este procedimiento almacenado recibe como parámetros el número de página y el número de filas a devolver. Los comandos OFFSET y FETCH se utilizan para calcular la página correcta y el número de filas a obtener:

USE AdventureWorks2008R2
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ExampleUsageOfSQLServerDenaliPagingFeature]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[ExampleUsageOfSQLServerDenaliPagingFeature]
GO
CREATE PROCEDURE ExampleUsageOfSQLServerDenaliPagingFeature
 (
  @PageNo INT,
  @RowCountPerPage INT
 )
AS
SELECT
  BusinessEntityID,
  PersonType,
  FirstName + ' ' + MiddleName + ' ' + LastName 
FROM Person.Person
ORDER BY BusinessEntityID
OFFSET (@PageNo - 1) * @RowCountPerPage ROWS
FETCH NEXT @RowCountPerPage ROWS ONLY
GO

Para ejecutar este procedimiento almacenado y obtener una página específica de resultados, puedes utilizar el siguiente comando:

EXECUTE ExampleUsageOfSQLServerDenaliPagingFeature 21, 5
GO

Este comando obtendrá cinco registros a partir de la página 21, con los registros ordenados por BusinessEntityID.

La característica OFFSET y FETCH de SQL Server 2012 simplifica la implementación de la paginación de SQL Server. Al utilizar estos comandos, puedes limitar fácilmente el número de filas enviadas al cliente, mejorando el rendimiento y reduciendo el tráfico de red.

La paginación de SQL ya no es tan desafiante como solía ser, gracias a esta nueva característica en SQL Server 2012.

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.