si son pocos registros, un objeto (entiendase dataset) no muy pesado se podria usar los recursos por ejemplo de .net, como el grid que ya te pagina.
Pero si son muchos registros y la paginación es obligatoria yo te diria que uses algo asi:
El siguiente procedimiento te retorna dos tablas, la primera con los registros solicitados y la segunta con la cantidad de paginas que aplican para la cantidad de registros solicitados.
Recibe dos parametros, "numero de registros" y "numero de pagina"
@num_registros = numero de registros que muestra la consulta
@num_pagina = la pagina que se va a mostrar
Código:
CREATE PROCEDURE Listar_Noticias_Pag](
@num_registros smallint = 100,
@num_pagina smallint = 1)
AS
SET NOCOUNT ON
BEGIN
Declare @NoRegs as smallint
SET @NoRegs = @num_registros * (@num_pagina - 1)
SELECT TOP(@num_registros)
[id_noticia]
,[nom_descriptor]
,[nom_noticia]
,[des_noticia]
,[fec_publicacion]
,[fec_vencimiento]
,[ind_estado]
FROM vrcNoticiaEspecialActivos
WHERE id_noticia not in (
SELECT TOP(@NoRegs) id_noticia
FROM vrcNoticiaEspecialActivos
ORDER BY fec_publicacion DESC)
ORDER BY fec_publicacion DESC
/* Retorna el numero total de estudios registrados */
DECLARE @CantidadRegistros as smallint
SELECT @CantidadRegistros = COUNT(*) FROM vrcNoticiaEspecialActivos
SELECT dbo.CantidadPaginas(@CantidadRegistros,@num_registros) TotalPaginas
END
La funcion CantidadPaginas seria algo asi:
Código:
CREATE FUNCTION CantidadPaginas
(
@CantidadRegistros as decimal,
@RegistrosPagina as decimal
)
RETURNS int
AS
BEGIN
-- Declare the return variable here
DECLARE @retorno as tinyint
set @retorno = @CantidadRegistros / @RegistrosPagina
if ((@CantidadRegistros / @RegistrosPagina) % 2 > 0 )
set @retorno = @retorno + 1
return @retorno
END