| ||||
usando "rowid" en cualquier tabla puedes sacar en las select los 'N' registros q quieras. Si la tabla tiene 30 registros, aces : select * from nombre_tabla where rowid < 10 esto para la primera tanda (primer tercio) y asi sucesibamente. estoy casi seguro deq esasi, si tienes algun provlema comentalo aqui, bye
__________________ Cuando creas que no hay solución posible, busca en los foros, siempre en mejor tener a la red mundial de tu parte |
| ||||
acabo de mirar en un manual q tengo q con cursores si se puede hacer pero no veo el modo de acerlo en una select
__________________ Cuando creas que no hay solución posible, busca en los foros, siempre en mejor tener a la red mundial de tu parte |
| ||||
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 |