DotNetcr.com
Si deseas hacer un intercambio de links con DotNetcr, escríbenos aquí
Recibe las actualizaciones vía RSS
Te invitamos a unirte en nuestras redes
   http://www.facebook.com/DotNetcr
   http://www.twitter.com/dotnetcr

Paginar datos en SQL Server

Por royrojas | 8/2/2011 | Visitas 3,494 | Voto 0.00
Aquí explicamos cómo hacer una lista de datos con paginación, de forma manual en SQL Server.
Categorías : ASP.NET, SQL Server

Una de las cosas que podemos hacer cuando ya manejamos mucha información en nuestro sitio web, es paginar los datos para que no se hagan listas interminables de datos en una pantalla. Esta forma que se explica aquí es mí preferida, ya que solicita nada más el extracto de información que va a desplegar, de esta forma se ahorran recursos.

Aquí solo explicaremos la parte de SQL Server, en otro artículo lo integraremos a un ejemplo con ASP.NET.

Para realizar esto vamos a necesitar una función y un procedimiento almacenado.

La función CantidadPaginas recibe dos valores, CantidadRegistros y RegistrosPagina. CantidadRegistros es la cantidad de registros que tiene la tabla, o el total de registros de información sin paginar. RegistrosPagina es la cantidad de registros por página. Como resultado esta función retorna la cantidad de páginas que supondría esta consulta. Excelente para hacer un DataPager (ejemplo: pags. 1.2.3.4.5)

CREATE FUNCTION [dbo].[CantidadPaginas](
@CantidadRegistros as decimal,
@RegistrosPagina as decimal
)

RETURNS int
AS
BEGIN

DECLARE @retorno as int
SET @retorno = @CantidadRegistros / @RegistrosPagina
IF ((@CantidadRegistros / @RegistrosPagina) > 1)
  BEGIN
    IF  ((@CantidadRegistros / @RegistrosPagina) % 2 > 0 )
      SET @retorno = @retorno + 1
  END
ELSE
  BEGIN
    IF (@retorno = 0 AND @CantidadRegistros > 0)
      SET @retorno = 1
  END

return @retorno

END

El procedimiento almacenado dn_sp_ListaRecursosXPagina recibe dos valores, Registros y Pagina. Registros es la cantidad de registros por página, valor que después se le pasa a la función anterior. El valor Pagina es la página que se quiere solicitar, por ejemplo el bloque de recursos de la página 2.

CREATE PROCEDURE [dbo].[dn_sp_ListaRecursosXPagina](
@registros int,
@pagina int
)
AS
  SET NOCOUNT ON
BEGIN

WITH dn_recurso_temp AS
(
SELECT ROW_NUMBER() OVER (ORDER BY codigo_recurso DESC) AS 'RowNumber',
  codigo_recurso,
  nombre_recurso,
  archivo,
  autor,
  fecha 
FROM dn_recurso
)

SELECT * FROM dn_recurso_temp
WHERE RowNumber between (@pagina * @registros)-@registros+1 and (@pagina * @registros)
ORDER BY codigo_recurso DESC

DECLARE @cantidad int
SELECT @cantidad = count(codigo_recurso) FROM dn_recurso

SELECT dbo.CantidadPaginas(@cantidad,@registros) TotalPaginas

END

En el procedimiento almacenado primero se solicitan los datos que se van a filtrar, la consulta a la tabla con los datos correspondientes, y se le agrega la columna RowNumber. RowNumber es la clave en esta operación. Row Number se debe ordenar por el valor que nosotros queremos que sea el indicador al filtro de páginas, como se vayan a ordenar los datos en la página. Puede ser un entero, fecha o el que queramos. Estos datos quedan almacenados en una tabla temporal o virtual

Una vez que tengamos los datos ordenados y con el número de línea, se filtra el bloque que queremos consultar. Es donde se puede ver el código similar a:

SELECT * FROM dn_recurso_temp
WHERE RowNumber between RegistroInicio and RegistroFin
ORDER BY codigo_recurso DESC

Luego se consulta la cantidad de páginas para retornar también este valor para poder hacer la paginación respectiva.

Area de Comentarios
Por Anónimo - Fecha: 2011/08/03 08:06 PM
Excelente
Por Anónimo - Fecha: 2011/12/28 09:31 AM
Thank you so much for this atirlce, it saved me time!
Por Anónimo - Fecha: 2011/12/29 05:48 AM
WPCkGn , [url=http://ceggnsrthtle.com/]ceggnsrthtle[/url], [link=http://sbkkezqsxghu.com/]sbkkezqsxghu[/link], http://luukqqezoeoi.com/
Por Anónimo - Fecha: 2011/12/31 09:16 AM
xHW3TM , [url=http://yvqbxaeegflw.com/]yvqbxaeegflw[/url], [link=http://lzrnlhtyqyjl.com/]lzrnlhtyqyjl[/link], http://jyuuqsgxtyjw.com/
Ingrese su Comentario
Comentario
Para poder votar debe estar registrado en DotNetcr.com
Solo queda registrado el primer voto enviado
Voto


Últimos Recursos
thesondemon
ibarra
dsevic
Eur
jota
juanjoguardiola
PER 237
MEX 236
CRI 185
COL 117
ESP 104
ARG 87