You are on page 1of 2

--SQL 2008

--Listado paginado desde - hasta


Create procedure USP_ListarPaginado_KaizenForce
@RegistrosPorPagina int,
@Pagina int
as
begin
WITH Registros as
(
Select [DepartmentID],[Name],[GroupName],
ROW_NUMBER() OVER(ORDER BY [DepartmentID] ASC) as 'Row'
FROM [HumanResources].[Department]
)

select top (@RegistrosPorPagina) * from Registros


where Row BETWEEN ((@Pagina-1)*@RegistrosPorPagina)
AND (@RegistrosPorPagina*@Pagina)*2
END

exec USP_ListarPaginado_KaizenForce 5,1

--Método para obtener los números del select (Desde, Hasta, Total, Páginas)
Create procedure USP_ListarPaginado_KaizenForce_Total
@RegistrosPorPagina int,
@Pagina int
as
declare
@TotalFiltro int,
@NumPaginas int,
@Resid int

set @TotalFiltro = (select count(1) FROM [HumanResources].[Department])

--Obtenemos la parte Entera del total de las páginas

set @NumPaginas=@TotalFiltro/@RegistrosPorPagina

--Obtenemos la parte decimal del total de la páginas

set @Resid=@TotalFiltro%@RegistrosPorPagina

--En caso que el residuo sea mayor a 0 le agregamos 1 –al total

if @Resid>0

begin

set @NumPaginas= @NumPaginas+1

end

begin

WITH Registros as

(
Select [DepartmentID],[Name],[GroupName],
ROW_NUMBER() OVER(ORDER BY [DepartmentID] ASC) as 'Row'
FROM [HumanResources].[Department]
)

select  top (@RegistrosPorPagina) * into #TablaTemporal from Registros

where Row BETWEEN ((@Pagina-1)*@RegistrosPorPagina)

AND (@RegistrosPorPagina*@Pagina)*2

select isnull(Min(Row),0) Menor, isnull(max(Row),0) Mayor, @TotalFiltro as Total,

@NumPaginas Paginas

from #TablaTemporal

END

exec USP_ListarPaginado_KaizenForce_Total 5,1

SQL 2012

DECLARE
@TamañoPagina TINYINT = 5,
@PaginaActual INT = 1;

Select [DepartmentID],[Name],[GroupName]
FROM [HumanResources].[Department]
ORDER BY [DepartmentID]
OFFSET (@TamañoPagina * (@PaginaActual - 1))
ROWS
FETCH NEXT @TamañoPagina ROWS ONLY;

You might also like