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
Ver todos mis consejos