Por: Ashish Kumar Mehta | Actualizado: 2011-04-18 | Comentarios (4) | Relacionado: 1 | 2 | 3 | 4 | 5 | Más > Paging

Problema

Mientras miraba a través de las nuevas características en SQL Server 2012 me encontré con una nueva característica OFFSET y FETCH. La cláusula OFFSET y FETCH de SQL Server 2012 le proporciona una opción para obtener sólo una página o una ventana de los resultados del conjunto de resultados completo. En este consejo veremos un ejemplo que utiliza la función OFFSET y FETCH de SQL Server 2012. Además, mostraremos cómo se puede implementar SQL Server Paging o recuperación de páginas de datos SQL utilizando esta nueva característica.

Solución

Usando esta característica de SQL Server 2012 se puede implementar fácilmente SQL Server Paging mientras se muestran los resultados al cliente. Vamos a echar un vistazo a un ejemplo simple y luego también cómo se podría construir un procedimiento almacenado para implementar la paginación de SQL.

Vamos a través de un ejemplo simple que demuestra cómo utilizar la característica OFFSET y FETCH de SQL Server 2012. Puedes ver a continuación que el TSQL tiene el mismo aspecto que el que escribes hoy, excepto que después de la cláusula ORDER BY tenemos los comandos OFFSET y FETCH. Una cosa a tener en cuenta es que tienes que usar un ORDER BY para usar esta característica. El OFFSET básicamente le dice a SQL que omita las primeras 100 filas y el FETCH obtendrá las siguientes 5 filas.

USE AdventureWorks2008R2GOSELECT BusinessEntityID ,PersonType ,FirstName + ' ' + MiddleName + ' ' + LastName FROM Person.Person ORDER BY BusinessEntityID ASC OFFSET 100 ROWS FETCH NEXT 5 ROWS ONLYGO

El siguiente fragmento muestra la salida al ejecutar los comandos anteriores. Esto muestra que las primeras 100 filas fueron descartadas y la consulta obtuvo las siguientes 5 filas en el conjunto de registros completo.

Vayamos a través de otro ejemplo en el que vamos a crear un procedimiento almacenado que utilizará la característica OFFSET y FETCH de SQL Server 2012 para lograr la paginación sql mientras se muestran los resultados a las máquinas cliente. En este procedimiento almacenado estamos pasando un número de página y el número de filas a devolver. Estos valores se calculan para obtener la página correcta y el número de filas.

USE AdventureWorks2008R2GOIF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'.') AND type in (N'P', N'PC'))DROP PROCEDURE .GOCREATE PROCEDURE ExampleUsageOfSQLServerDenaliPagingFeature ( @PageNo INT, @RowCountPerPage INT )ASSELECT BusinessEntityID ,PersonType ,FirstName + ' ' + MiddleName + ' ' + LastName FROM Person.Person ORDER BY BusinessEntityID OFFSET (@PageNo - 1) * @RowCountPerPage ROWS FETCH NEXT @RowCountPerPage ROWS ONLYGO

Vamos a seguir adelante y ejecutar el procedimiento almacenado utilizando el siguiente comando. Esto nos dará cinco registros a partir de la página 21 donde los registros están ordenados por BusinessEntityID.

/* Display Records Between 101 AND 105 BusinessEntityID */EXECUTE ExampleUsageOfSQLServerDenaliPagingFeature 21, 05GO

El siguiente fragmento muestra la salida una vez que el procedimiento almacenado anterior se ejecuta con éxito. Puede ver que las primeras 100 (20 páginas * 5 filas por página = 100) filas fueron descartadas y el procedimiento almacenado obtuvo sólo las siguientes 5 filas, limitando así el número de filas enviadas al cliente.

Ha visto en este consejo lo fácil que puede lograr la paginación de SQL Server utilizando la característica OFFSET y FETCH de SQL Server 2012. La paginación de SQL no es tan difícil como solía ser con esta nueva característica.

Siguientes pasos
  • Obtenga una visión general de la característica WITH RESULT SETS de SQL Server 2012

Última actualización: 2011-04-18

Acerca del autor
Ashish Kumar Mehta ha estado contribuyendo a la comunidad MSSQLTips.com desde 2009 con más de 60 consejos.
Ver todos mis consejos

Deja una respuesta

Tu dirección de correo electrónico no será publicada.