Hola, entonces el siguiente codigo te podria servir, es un ejemplo de una funcion y procedimiento almacenado, lo explico abajo
Código:
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) % 2 > 0 )
set @retorno = @retorno + 1
return @retorno
END
GO
CREATE PROCEDURE EJEMPLO_SP_PAGINA(
@num_registros int = 100
,@num_pagina int = 1)
AS
SET NOCOUNT ON
BEGIN
Declare @NoRegs as int
SET @NoRegs = @num_registros * (@num_pagina - 1)
SELECT TOP(@num_registros)
[codigo_registro],
[descripcion]
FROM T_Nombre_Tabla T
WHERE [codigo_registro] NOT IN (
SELECT TOP(@NoRegs) [codigo_registro]
FROM CRM_CLIENT_FLAG
ORDER BY [codigo_registro] DESC)
ORDER BY [codigo_registro] DESC
/* Retorna el numero total de paginas */
DECLARE @CantidadRegistros as int
SELECT @CantidadRegistros = COUNT(*) FROM T_Nombre_Tabla
SELECT dbo.CantidadPaginas(@CantidadRegistros,@num_registros) TotalPaginas
END
La funcion CantidadPaginas va a retornar la cantidad de paginas posibles en una candidad de registros, por ejemplo se le indican que son 100 registros y se necesitan paginas de 20 registros cada una, entonces te va a retornar 5.
El procedimiento almacenado lo que hace es retornar el bloque que se necesita, volviendo al ejemplo de los 100 registros, si al SP se le indica que se quieren los registros de la pagina 4, en un bloque de 10 registros por pagina, te va a retornar los registros del 40 al 50, osea la pagina 4.
Entonces este SP te retorna dos tablas uno con los datos correspondientes y otra tabla con la cantidad de paginas que se podrian paginar con base a los parametros solicitados.
Creo que esto resuelve tu problema