Clausula TOP y rowcount

02/07/2004 - 10:47 por J | Informe spam
Hola a todos!

alguien ha tenido alguna vez que pelearse con la clausula top, del estilo
Select top 100 * from
esto es para obtener los primeros 100 registros,
pero si quiero obtener los 100 siguientes??
existe alguna claúsula similar??

la tabla sobre la que trabajo es horrible (la tabla de traces de sql server)
así que no hay ningún campo ni conjunto de campos que identifiquen
unicamente el registro, por lo que no puedo hacer selects anidados para
obtener los 100 siguientes,
necesito algo parecido al top pero con un rango (en mySQL se llama limit) o
un rowcount (que creo que tampoco existe en sqlserver)

Bueno, espero que alguien me pueda ayudar

un saludo y gracias

Preguntas similare

Leer las respuestas

#1 Jomaweb
02/07/2004 - 11:58 | Informe spam
En SQL server sí existe el ROWCOUNT.


"J" escribió en el mensaje
news:ODkp$
Hola a todos!

alguien ha tenido alguna vez que pelearse con la clausula top, del estilo
Select top 100 * from
esto es para obtener los primeros 100 registros,
pero si quiero obtener los 100 siguientes??
existe alguna claúsula similar??

la tabla sobre la que trabajo es horrible (la tabla de traces de sql


server)
así que no hay ningún campo ni conjunto de campos que identifiquen
unicamente el registro, por lo que no puedo hacer selects anidados para
obtener los 100 siguientes,
necesito algo parecido al top pero con un rango (en mySQL se llama limit)


o
un rowcount (que creo que tampoco existe en sqlserver)

Bueno, espero que alguien me pueda ayudar

un saludo y gracias



Respuesta Responder a este mensaje
#2 J
02/07/2004 - 12:33 | Informe spam
el RowCount, al menos el que yo conozco, existe pero como

set rowcount = 100;
select

para bajarse de 100 en 100,
pero para decirle a partir de determinado punto cien más, sin que tengan que
cumplir ninguna otra condición, solamente que estén a partir de ese punto...
no se me ocurre nada,

gracias de todas formas, se os ocure alguna otra forma?
a no ser que lo que haya dicho yo sea diferente a lo que te refieras, y
puedes tener el rowcount como si fuera un campo más de la tabla...



"Jomaweb" escribió en el mensaje
news:%
En SQL server sí existe el ROWCOUNT.


"J" escribió en el mensaje
news:ODkp$
> Hola a todos!
>
> alguien ha tenido alguna vez que pelearse con la clausula top, del


estilo
> Select top 100 * from
> esto es para obtener los primeros 100 registros,
> pero si quiero obtener los 100 siguientes??
> existe alguna claúsula similar??
>
> la tabla sobre la que trabajo es horrible (la tabla de traces de sql
server)
> así que no hay ningún campo ni conjunto de campos que identifiquen
> unicamente el registro, por lo que no puedo hacer selects anidados para
> obtener los 100 siguientes,
> necesito algo parecido al top pero con un rango (en mySQL se llama


limit)
o
> un rowcount (que creo que tampoco existe en sqlserver)
>
> Bueno, espero que alguien me pueda ayudar
>
> un saludo y gracias
>
>
>


Respuesta Responder a este mensaje
#3 Liliana Sorrentino
02/07/2004 - 14:00 | Informe spam
Hola,
Javier Loria escribió este artículo sobre paginación, tal
vez puedas adaptarlo.

http://www.configuracionesintegrale...procpagina
n.asp?articulo%5

Saludos... Liliana.

el RowCount, al menos el que yo conozco, existe pero como

set rowcount = 100;
select

para bajarse de 100 en 100,
pero para decirle a partir de determinado punto cien más,


sin que tengan que
cumplir ninguna otra condición, solamente que estén a


partir de ese punto...
no se me ocurre nada,

gracias de todas formas, se os ocure alguna otra forma?
a no ser que lo que haya dicho yo sea diferente a lo que


te refieras, y
puedes tener el rowcount como si fuera un campo más de la


tabla...



"Jomaweb" escribió en el


mensaje
news:%
En SQL server sí existe el ROWCOUNT.


"J" escribió en el mensaje
news:ODkp$
> Hola a todos!
>
> alguien ha tenido alguna vez que pelearse con la




clausula top, del
estilo
> Select top 100 * from
> esto es para obtener los primeros 100 registros,
> pero si quiero obtener los 100 siguientes??
> existe alguna claúsula similar??
>
> la tabla sobre la que trabajo es horrible (la tabla




de traces de sql
server)
> así que no hay ningún campo ni conjunto de campos que




identifiquen
> unicamente el registro, por lo que no puedo hacer




selects anidados para
> obtener los 100 siguientes,
> necesito algo parecido al top pero con un rango (en




mySQL se llama
limit)
o
> un rowcount (que creo que tampoco existe en sqlserver)
>
> Bueno, espero que alguien me pueda ayudar
>
> un saludo y gracias
>
>
>






.

Respuesta Responder a este mensaje
#4 Javier Loria
02/07/2004 - 16:03 | Informe spam
Hola:
Ummm. Que version de SQL trabajas porque las trazas de SQL 2000 SI
TIENEN una llave primaria es la columna RowNumber?
Demasiadas veces tenemos que pelear con Tablas que no tienen llaves
Primarias y el problema es que son basureros de datos. Cuando los
proveedores de Datos(Microsoft, Oracle, DB2, Sybase, MySQL, etc.) ofrecen
algun numero de linea los programadores los usen como forma de navegar en la
"Tabla/Matriz" de datos y se olvidan de las conceptos Basicos de Bases de
Datos. Oracle tiene el RowNum para simular esto, y el MS SQL heredo de
Sybase el no exponer el numero de fila sino el obligar a los programadores
que desean usarlo a declararlo explicitamente usando la propiedad Identity.
Bastante mejores serian las aplicaciones si se eliminaran estas
opciones!!!.
En todo caso si no puedes o no quieres cambiar el esquema de tus tablas,
y quieres paginar puedes hacerlo siguiendo el siguiente ejemplo:

Cursores de ADO
Una opcion "hacia atras" es utilizar los Procedimientos Extendidos que
utiliza ADO para paginar. Yo no montaria una aplicacion sobre esta
arquitectura, pero si es codigo de una oportunidad puedes hacer algo como:
== Codigo de Llenado de Tabla Basurero
SELECT * INTO Autores
FROM Pubs.dbo.Authors
UNION ALL SELECT * FROM Pubs.dbo.Authors
UNION ALL SELECT * FROM Pubs.dbo.Authors
DECLARE @P1 int, @P2 int, @P3 int, @P4 int
SELECT @P10150000, @P2=1, @P3=1, @P4#
EXEC sp_cursoropen @P1 output, N'SELECT * FROM Autores ORDER BY AU_ID', @P2
output, @P3 output, @P4 output
exec sp_cursorfetch @p1, 16, 1, 5
exec sp_cursorfetch @p1, 16, 6, 5
exec sp_cursorclose @p1
Fin de Codigo
== El codigo anterior permite usar las Tablas como si fueran arreglos de
datos, aun cuando no tengan ni llave Primaria, ni Identity, sin cambiar el
esquema de las tablas.
Los procedimientos usados no estan documentados y por ende pueden
cambiar entre versiones de SQL.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.


J escribio:
el RowCount, al menos el que yo conozco, existe pero como

set rowcount = 100;
select

para bajarse de 100 en 100,
pero para decirle a partir de determinado punto cien más, sin que
tengan que cumplir ninguna otra condición, solamente que estén a
partir de ese punto... no se me ocurre nada,

gracias de todas formas, se os ocure alguna otra forma?
a no ser que lo que haya dicho yo sea diferente a lo que te refieras,
y puedes tener el rowcount como si fuera un campo más de la tabla...



"Jomaweb" escribió en el mensaje
news:%
En SQL server sí existe el ROWCOUNT.


"J" escribió en el mensaje
news:ODkp$
Hola a todos!

alguien ha tenido alguna vez que pelearse con la clausula top, del
estilo Select top 100 * from
esto es para obtener los primeros 100 registros,
pero si quiero obtener los 100 siguientes??
existe alguna claúsula similar??

la tabla sobre la que trabajo es horrible (la tabla de traces de
sql server) así que no hay ningún campo ni conjunto de campos que
identifiquen unicamente el registro, por lo que no puedo hacer
selects anidados para obtener los 100 siguientes,
necesito algo parecido al top pero con un rango (en mySQL se llama
limit) o un rowcount (que creo que tampoco existe en sqlserver)

Bueno, espero que alguien me pueda ayudar

un saludo y gracias
Respuesta Responder a este mensaje
#5 Emilio Boucau
02/07/2004 - 17:19 | Informe spam
Eso Javier !!! Resucitemos el viejo tema de debate ... las Primary Keys
Identity son una barbaridad en un diseño !!!


Saludos !

Emilio Boucau
Buenos Aires - Argentina
http://www.portalsql.com
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida