Ver Mensaje Individual
  #5 (permalink)  
Antiguo 17/02/2005, 11:29
Avatar de cableh
cableh
 
Fecha de Ingreso: diciembre-2004
Mensajes: 54
Antigüedad: 20 años, 1 mes
Puntos: 0
Para ms SQL Server puedes hacer un procedimiento almacenado desde el cual pasándole un parámetro especificamos que parte de la tabla queremos devolver. En el procedimiento crearemos un tabla temporal con la misma estructura de la tabla original y le añadiremos un campo identity (que nos servirá como contador de los registros), cargamos los datos de la tabla original en la temporal y hacemos la select oportuna.

Te mando un ejemplo:

Tenemos un tabla de clientes donde:


IdCliente ---> int
NombreCliente ---> varchar(100)

y nuestro procedimiento almacenado:


ALTER PROCEDURE DevuelveClientes
(
@Pagina int -- (valores de 0 para el primer tercio,
-- 1 para el segundo y 2 para el tercero)
)
AS

-- Creamos la tabla temporal con un nuevo campo identity (insertará
-- automática y consecutivamente valores desde el 1)

CREATE TABLE #TempClientes
(
ID int IDENTITY, -- nuevo campo
IdCliente int,
NombreCliente varchar(100)

)

-- insertamos los registros de la tabla cliente en la temporal

insert into #TempClientes (IdCliente,NombreCliente)
select IdCliente,NombreCliente
from Clientes order by NombreCliente

-- Calculamos el número total de registros de la tabla y cuanto supone cada tercio
declare @Tercio int
declare @nreg int

select @nreg=count(*),@Tercio=count(*)/3 from clientes

-- Calculamos el primer registro y último registro
declare @PrimerRegistro int
declare @UltimoRegistro int

set @PrimerRegistro=@Pagina*@Tercio+1
set @UltimoRegistro=(@Pagina+1)*@Tercio

-- nos aseguramos que en el último tercio devuelva todos los registros
if @Pagina=3
set @UltimoRegistro=@nreg

-- Devolvemos los registros que necesitamos
select * from #TempClientes
where id>=@PrimerRegistro and id<@UltimoRegistro

-- fin procedimiento

Este procedimiento lo podríamos hacer más general añadiendo un parámetro de tamaño de la página.

Quizás quede un poco complicado y haya otra forma de hacerlo más fácil, pero yo creo que esto funcionará, espero que te sirva.

Salu2.

Última edición por cableh; 17/02/2005 a las 11:33