Select top

27/04/2005 - 11:46 por Jose L. | Informe spam
Hola, tengo un problemilla con el select top en las consultas sobre sqlserver.

Tengo una tabla con 15 registros, pero para mostrarlos al usuario, tengo que
paginarlos de 5 en 5, con lo que ejecuto la query con select top 5..., select
top 10... y select top 15..., todas ellas con un order by por una determinada
columna, para despues rellenar un array con los registros que me interesan.

Pues bien, resulta que el orden de los registros no es el mismo en las 3
consultas, con lo que en la paginación no veo todos los datos correctamente.

alguien sabe que me puede estar pasando?, alguna sugerencia?

Segun he leido en los BOL de sqlserver, el top con un order by, primero
ordena y despues obtiene los registros indicados, pero parece ser que no lo
está haciendo bien. Alguna idea?

Gracias por anticipado

Preguntas similare

Leer las respuestas

#1 Carlos Sacristán
27/04/2005 - 12:17 | Informe spam
Si las condiciones son las mismas y el conjunto de datos no ha cambiado,
el orden debería seguir siendo el mismo. Efectivamente para poder sacar los
n primeros registros de un conjunto primero hay que ordenarlos para saber
qué significa exactamente "primeros". Dinos exactamente qué es lo que te
parece que el gestor esté haciendo mal y te podremos ayudar mejor.

Otra cosa, para paginar no es necesario ir aumentando el número de
registros a mostrar, sino que lo que variará será el registro a partir del
cual mostrar. Es decir, si la primera vez que le mostraste los 5 primeros
registros al usuario, el último de ellos tenía como valor de la PK un 5 (por
ejemplo), la sentencia que tendrás que formar será algo similar a la
siguiente:

SELECT TOP 5 campo1, campo2, campo...
FROM tuTabla
WHERE campoPK > 5


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Jose L." (donotspam)> escribió en el mensaje
news:
Hola, tengo un problemilla con el select top en las consultas sobre


sqlserver.

Tengo una tabla con 15 registros, pero para mostrarlos al usuario, tengo


que
paginarlos de 5 en 5, con lo que ejecuto la query con select top 5...,


select
top 10... y select top 15..., todas ellas con un order by por una


determinada
columna, para despues rellenar un array con los registros que me


interesan.

Pues bien, resulta que el orden de los registros no es el mismo en las 3
consultas, con lo que en la paginación no veo todos los datos


correctamente.

alguien sabe que me puede estar pasando?, alguna sugerencia?

Segun he leido en los BOL de sqlserver, el top con un order by, primero
ordena y despues obtiene los registros indicados, pero parece ser que no


lo
está haciendo bien. Alguna idea?

Gracias por anticipado
Respuesta Responder a este mensaje
#2 Nuno Santos
27/04/2005 - 12:51 | Informe spam
Una cosita adicional... En algunas consultas sin utilizar el ORDER BY los
resultados listados PUEDEN venir en orders diferentes... Lo que yo hago es
colocar casi siempre el ORDER BY...

Nuno Santos


Nuno Santos
nunos7[REMOVER]@hotmail.com

"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> wrote in message
news:u4N5$
Si las condiciones son las mismas y el conjunto de datos no ha
cambiado,
el orden debería seguir siendo el mismo. Efectivamente para poder sacar
los
n primeros registros de un conjunto primero hay que ordenarlos para saber
qué significa exactamente "primeros". Dinos exactamente qué es lo que te
parece que el gestor esté haciendo mal y te podremos ayudar mejor.

Otra cosa, para paginar no es necesario ir aumentando el número de
registros a mostrar, sino que lo que variará será el registro a partir del
cual mostrar. Es decir, si la primera vez que le mostraste los 5 primeros
registros al usuario, el último de ellos tenía como valor de la PK un 5
(por
ejemplo), la sentencia que tendrás que formar será algo similar a la
siguiente:

SELECT TOP 5 campo1, campo2, campo...
FROM tuTabla
WHERE campoPK > 5


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Jose L." (donotspam)> escribió en el mensaje
news:
Hola, tengo un problemilla con el select top en las consultas sobre


sqlserver.

Tengo una tabla con 15 registros, pero para mostrarlos al usuario, tengo


que
paginarlos de 5 en 5, con lo que ejecuto la query con select top 5...,


select
top 10... y select top 15..., todas ellas con un order by por una


determinada
columna, para despues rellenar un array con los registros que me


interesan.

Pues bien, resulta que el orden de los registros no es el mismo en las 3
consultas, con lo que en la paginación no veo todos los datos


correctamente.

alguien sabe que me puede estar pasando?, alguna sugerencia?

Segun he leido en los BOL de sqlserver, el top con un order by, primero
ordena y despues obtiene los registros indicados, pero parece ser que no


lo
está haciendo bien. Alguna idea?

Gracias por anticipado




Respuesta Responder a este mensaje
#3 Jose L.
27/04/2005 - 13:20 | Informe spam
A mi me salen los resultados diferntes tanto si utilizo el order by como si
no lo utilizo.

La verdad es que ya no se que puede estar pasando.

"Nuno Santos" escribió:

Una cosita adicional... En algunas consultas sin utilizar el ORDER BY los
resultados listados PUEDEN venir en orders diferentes... Lo que yo hago es
colocar casi siempre el ORDER BY...

Nuno Santos


Nuno Santos
nunos7[REMOVER]@hotmail.com

"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> wrote in message
news:u4N5$
> Si las condiciones son las mismas y el conjunto de datos no ha
> cambiado,
> el orden debería seguir siendo el mismo. Efectivamente para poder sacar
> los
> n primeros registros de un conjunto primero hay que ordenarlos para saber
> qué significa exactamente "primeros". Dinos exactamente qué es lo que te
> parece que el gestor esté haciendo mal y te podremos ayudar mejor.
>
> Otra cosa, para paginar no es necesario ir aumentando el número de
> registros a mostrar, sino que lo que variará será el registro a partir del
> cual mostrar. Es decir, si la primera vez que le mostraste los 5 primeros
> registros al usuario, el último de ellos tenía como valor de la PK un 5
> (por
> ejemplo), la sentencia que tendrás que formar será algo similar a la
> siguiente:
>
> SELECT TOP 5 campo1, campo2, campo...
> FROM tuTabla
> WHERE campoPK > 5
>
>
> Un saludo
>
> -
> "Sólo sé que no sé nada. " (Sócrates)
>
> "Jose L." (donotspam)> escribió en el mensaje
> news:
>> Hola, tengo un problemilla con el select top en las consultas sobre
> sqlserver.
>>
>> Tengo una tabla con 15 registros, pero para mostrarlos al usuario, tengo
> que
>> paginarlos de 5 en 5, con lo que ejecuto la query con select top 5...,
> select
>> top 10... y select top 15..., todas ellas con un order by por una
> determinada
>> columna, para despues rellenar un array con los registros que me
> interesan.
>>
>> Pues bien, resulta que el orden de los registros no es el mismo en las 3
>> consultas, con lo que en la paginación no veo todos los datos
> correctamente.
>>
>> alguien sabe que me puede estar pasando?, alguna sugerencia?
>>
>> Segun he leido en los BOL de sqlserver, el top con un order by, primero
>> ordena y despues obtiene los registros indicados, pero parece ser que no
> lo
>> está haciendo bien. Alguna idea?
>>
>> Gracias por anticipado
>
>



Respuesta Responder a este mensaje
#4 Jose L.
27/04/2005 - 13:22 | Informe spam
No se si esto tiene algo que ver, pero la ordenación no se realiza por la
PK., con lo
que no puedo realzar la clausula where que comentas.

en cuanto a lo que está realizando el motor, la verdad es que no tengo ni
idea, porque parece ser que cada vez que lanzo las consultas, me devuelve
algo diferente.

"Carlos Sacristán" escribió:

Si las condiciones son las mismas y el conjunto de datos no ha cambiado,
el orden debería seguir siendo el mismo. Efectivamente para poder sacar los
n primeros registros de un conjunto primero hay que ordenarlos para saber
qué significa exactamente "primeros". Dinos exactamente qué es lo que te
parece que el gestor esté haciendo mal y te podremos ayudar mejor.

Otra cosa, para paginar no es necesario ir aumentando el número de
registros a mostrar, sino que lo que variará será el registro a partir del
cual mostrar. Es decir, si la primera vez que le mostraste los 5 primeros
registros al usuario, el último de ellos tenía como valor de la PK un 5 (por
ejemplo), la sentencia que tendrás que formar será algo similar a la
siguiente:

SELECT TOP 5 campo1, campo2, campo...
FROM tuTabla
WHERE campoPK > 5


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Jose L." (donotspam)> escribió en el mensaje
news:
> Hola, tengo un problemilla con el select top en las consultas sobre
sqlserver.
>
> Tengo una tabla con 15 registros, pero para mostrarlos al usuario, tengo
que
> paginarlos de 5 en 5, con lo que ejecuto la query con select top 5...,
select
> top 10... y select top 15..., todas ellas con un order by por una
determinada
> columna, para despues rellenar un array con los registros que me
interesan.
>
> Pues bien, resulta que el orden de los registros no es el mismo en las 3
> consultas, con lo que en la paginación no veo todos los datos
correctamente.
>
> alguien sabe que me puede estar pasando?, alguna sugerencia?
>
> Segun he leido en los BOL de sqlserver, el top con un order by, primero
> ordena y despues obtiene los registros indicados, pero parece ser que no
lo
> está haciendo bien. Alguna idea?
>
> Gracias por anticipado



Respuesta Responder a este mensaje
#5 Jose L.
27/04/2005 - 13:54 | Informe spam
Creo que ya lo tengo, al final ordenando por todos los campos que forman la
PK si que salen siempre el mismo conjunto de datos.

Gracias de todos modos.

"Jose L." escribió:

Hola, tengo un problemilla con el select top en las consultas sobre sqlserver.

Tengo una tabla con 15 registros, pero para mostrarlos al usuario, tengo que
paginarlos de 5 en 5, con lo que ejecuto la query con select top 5..., select
top 10... y select top 15..., todas ellas con un order by por una determinada
columna, para despues rellenar un array con los registros que me interesan.

Pues bien, resulta que el orden de los registros no es el mismo en las 3
consultas, con lo que en la paginación no veo todos los datos correctamente.

alguien sabe que me puede estar pasando?, alguna sugerencia?

Segun he leido en los BOL de sqlserver, el top con un order by, primero
ordena y despues obtiene los registros indicados, pero parece ser que no lo
está haciendo bien. Alguna idea?

Gracias por anticipado
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida