Como se menciona comentarios arriba no es recomendable poder mostrar toda una gran cantidad de datos ya que esto consumiría bastante recursos.
La solucion que brinda
Aquaventus esta bien pero lo que talves uno no se da cuenta que en esta solucion primero llama a todos los registros y luego muestra pagina por pagina que vendria siendo un retardo al momento de llamar la informacion que esta en el Servidor.
Yo tengo una solución que realice hace tiempo como podría paginar mis datos sin necesidad de poder llamar a todos los registros, mira este ejemplo:
Código SQL:
Ver original-- =============================================
-- Author: Luis Fernando
-- Create date: 10/02/2009
-- Description: Procedimiento que simula el Limit de MySQL Server
-- =============================================
ALTER PROCEDURE USP_LIMIT
(
@TBL VARCHAR(MAX), @COL VARCHAR(MAX), @INI INT,
@FIN INT
)
AS
SET NOCOUNT ON;
BEGIN TRY
DECLARE @SQL NVARCHAR(MAX) -- DECLARANDO VARIABLE A EJECUTAR
SET @SQL = N'SELECT * FROM
(
SELECT *,ROW_NUMER() OVER(ORDER BY '+ @COL +') AS X
FROM '+ @TBL +'
) AS Y WHERE X BETWEEN ' + CONVERT(VARCHAR,@INI) +' AND ' + CONVERT(VARCHAR,@FIN) +' ';
EXECUTE SP_EXECUTESQL @SQL;
END TRY
BEGIN CATCH
PRINT 'NUMERO DE ERROR: ' + CONVERT(VARCHAR,ERROR_NUMBER());
PRINT 'MENSAJE DE ERROR: ' + ERROR_MESSAGE();
END CATCH
GO
-- =============================================
-- Author: Luis Fernando
-- Create date: 10/02/2009
-- Description: Procedimiento q me devuelve un conjunto de paginas depiendo la cantidad de datos a paginar
-- =============================================
ALTER PROCEDURE USP_LIMIT_PAGINATION
(
@TBL VARCHAR(MAX), @REG_PAGE INT
)
AS
SET NOCOUNT ON;
DECLARE @SQL NVARCHAR(MAX) -- DECLARANDO VARIABLE A EJECUTAR
SET @SQL = N'SELECT COUNT(*) / ' + CAST(@REG_PAGE AS VARCHAR) + ' FROM ' + @TBL;
EXECUTE SP_EXECUTESQL @SQL;
GO
Lo que hace el primer stored procedure es poder solo mostrar o llamar una cierta cantidad de registros mandando como parametros lo siguiente:
- @TBL que viene siendo el nombre de la tabla
- @COL que viene siendo el nombre de la columna a ordenar este parametro es importante para realizar la paginacion
- @INI viene siendo el inicio del registro a consultar
- @FIN viene siendo el final del registro a consultar
En el segundo stored procedure lo único que se hace es poder devolver la cantidad de paginas que se va a poder mostrar para la paginación.
Ahora en tu aplicacion VB. NET o C# debes hacer lo siguiente:
Primero
Debes crear una función que invoque el segundo stored procedure en el evento load con el fin de poder listar el total de paginas en un combo o una lista o cualquier objeto que tu desees, debes enviar la tabla a filtrar y el total de registros a ver por cada pagina
Segundo
Debes crear una funcion que invoque el primer stored procedure y en el evento load, envias como parametro @INI 0 y como parametro @FIN el total de registros por pagina enviado en el primer stored procedure
Tercero
Con esto ya te estará mostrando una cierta cantidad de registros y luego lo único que deberías hacer es programar en tu objeto que cada vez que seleccione invoque el segundo stored procedure enviando el correspondiente parametro @INI y @FIN esto te puedes guiar tambien de la pagina que envio
Aquaventus
Te enviara la solución pero lo tengo en mi casa y ahora me encuentro yo en mi oficina