Order by vistas Sql server 2005

22/01/2009 - 00:12 por toranzo | Informe spam
Tengo una aplicación sql 2000 al pasarlo a sql 2005 la ordenación esta
fallado, en la vista ya no funciona el order by, hay que realizarlo en la
aplicación.



Tampoco me funcion poniendo comatibilidad 80.



Existe alguna otra forma

Preguntas similare

Leer las respuestas

#6 Alejandro Mesa
22/01/2009 - 17:49 | Informe spam
toranzo,

FIX: When you query through a view that uses the ORDER BY clause in SQL
Server 2008, the result is still returned in random order
http://support.microsoft.com/kb/926292

Presta atencion a la parte:

Restart information
You must restart the SQL Server service after you apply this hotfix.

Actions after you apply this hotfix
This hotfix introduces trace flag 168. After you apply this hotfix, you must
enable trace flag 168. For information about how to enable a trace flag in
SQL Server 2005, see the "Remark" section of the following Microsoft
Developer Network (MSDN) Web site:
http://msdn2.microsoft.com/en-us/li...88396.aspx
(http://msdn2.microsoft.com/en-us/li...88396.aspx)
Additionally, you must change the compatibility level of the database that
contains the view to 80.

To change the compatibility level, follow these steps:
Open SQL Server Management Studio, and then connect to the instance of SQL
Server 2005.
Right-click the database that contains the view, and then click Properties.
In the Select a page pane, click Options.
In the Compatibility level list, select SQL Server 2000 (80).

Note Trace flag 168 must be set before the database is migrated to SQL
Server 2005. If trace flag 168 is set after the database is migrated, the
query result will remain unsorted.


Ojo con el ultimo parrafo.

AMB


"toranzo" wrote:

Gracias de nuevo, tenia el sp2 y instalado el sp3, pero sigue de las misma
forma no se respecta la ordenacion de la vista, es decir el order by
guardado en la vista no lo tiene en cuenta.


"Alejandro Mesa" escribió en el
mensaje news:
>> Con Sp2 se podria corregir el problema. y lo podriamos dejar con
>> complatibilidad 80 o 90 ?
>
> Con el sp2 se soluciona ese problema, pero eso no quiere decir que puedas
> usar compatibilidad 90, pues eso depende de que otras facilidades de
> versiones anteriores estas usando y que se deban cambiar, como por ejemplo
> el
> uso de los operadores de union *= y =*.
>
> Aqui puedes encontrar la lista.
>
> Backward Compatibility
> http://msdn.microsoft.com/en-us/library/ms143232(SQL.90).aspx
>
>
> AMB
>
>
> "toranzo" wrote:
>
>> Muchas gracias, el problema es que es un apliacion un poco vieja que esta
>> en
>> mantenimiento. Y no queremos reacerla.
>>
>> Con Sp2 se podria corregir el problema. y lo podriamos dejar con
>> complatibilidad 80 o 90 ?
>>
>> "Alejandro Mesa" escribió en el
>> mensaje news:
>> > Toranzo,
>> >
>> > No eres el primer cliente en tener este problema, el cual es producto
>> > de
>> > un
>> > mal uso
>> > de esta clausula, ademas de depender de una facilidad que no esta
>> > documentada.
>> >
>> > La unica forma de garantizar un resultado ordenado, es usando la
>> > clausula
>> > "order by" en la sentencia que retorna la data, en este caso la
>> > sentencia
>> > que
>> > referencia a la vista.
>> >
>> > Te recomiendo que cambies todas esas vistas y que uses la clausula en
>> > el
>> > lugar correcto. Ah, y recuerda installar el ultimo service pack, pues
>> > este
>> > problema se corrige al instalar el service pack 2 de SS 2005, aunque yo
>> > te
>> > recomiendo que instales el ultimo, que es el 3.
>> >
>> > SQL Server 2005 Service Pack 3
>> > http://www.microsoft.com/downloads/...laylang=en
>> >
>> >
>> > AMB
>> >
>> > "toranzo" wrote:
>> >
>> >> Tengo una aplicación sql 2000 al pasarlo a sql 2005 la ordenación esta
>> >> fallado, en la vista ya no funciona el order by, hay que realizarlo en
>> >> la
>> >> aplicación.
>> >>
>> >>
>> >>
>> >> Tampoco me funcion poniendo comatibilidad 80.
>> >>
>> >>
>> >>
>> >> Existe alguna otra forma
>> >>
>> >>
>> >>
>>
>>
>>



Respuesta Responder a este mensaje
#7 Carlos Sacristan
22/01/2009 - 17:50 | Informe spam
¿Has hecho lo que comentaba Rubén de poner el TOP (99.9999999999999) PERCENT
en vez del TOP (100) PERCENT?

Un saludo
-
www.navento.com
Servicios de Localización GPS


"toranzo" wrote:

Gracias de nuevo, tenia el sp2 y instalado el sp3, pero sigue de las misma
forma no se respecta la ordenacion de la vista, es decir el order by
guardado en la vista no lo tiene en cuenta.


"Alejandro Mesa" escribió en el
mensaje news:
>> Con Sp2 se podria corregir el problema. y lo podriamos dejar con
>> complatibilidad 80 o 90 ?
>
> Con el sp2 se soluciona ese problema, pero eso no quiere decir que puedas
> usar compatibilidad 90, pues eso depende de que otras facilidades de
> versiones anteriores estas usando y que se deban cambiar, como por ejemplo
> el
> uso de los operadores de union *= y =*.
>
> Aqui puedes encontrar la lista.
>
> Backward Compatibility
> http://msdn.microsoft.com/en-us/library/ms143232(SQL.90).aspx
>
>
> AMB
>
>
> "toranzo" wrote:
>
>> Muchas gracias, el problema es que es un apliacion un poco vieja que esta
>> en
>> mantenimiento. Y no queremos reacerla.
>>
>> Con Sp2 se podria corregir el problema. y lo podriamos dejar con
>> complatibilidad 80 o 90 ?
>>
>> "Alejandro Mesa" escribió en el
>> mensaje news:
>> > Toranzo,
>> >
>> > No eres el primer cliente en tener este problema, el cual es producto
>> > de
>> > un
>> > mal uso
>> > de esta clausula, ademas de depender de una facilidad que no esta
>> > documentada.
>> >
>> > La unica forma de garantizar un resultado ordenado, es usando la
>> > clausula
>> > "order by" en la sentencia que retorna la data, en este caso la
>> > sentencia
>> > que
>> > referencia a la vista.
>> >
>> > Te recomiendo que cambies todas esas vistas y que uses la clausula en
>> > el
>> > lugar correcto. Ah, y recuerda installar el ultimo service pack, pues
>> > este
>> > problema se corrige al instalar el service pack 2 de SS 2005, aunque yo
>> > te
>> > recomiendo que instales el ultimo, que es el 3.
>> >
>> > SQL Server 2005 Service Pack 3
>> > http://www.microsoft.com/downloads/...laylang=en
>> >
>> >
>> > AMB
>> >
>> > "toranzo" wrote:
>> >
>> >> Tengo una aplicación sql 2000 al pasarlo a sql 2005 la ordenación esta
>> >> fallado, en la vista ya no funciona el order by, hay que realizarlo en
>> >> la
>> >> aplicación.
>> >>
>> >>
>> >>
>> >> Tampoco me funcion poniendo comatibilidad 80.
>> >>
>> >>
>> >>
>> >> Existe alguna otra forma
>> >>
>> >>
>> >>
>>
>>
>>



Respuesta Responder a este mensaje
#8 Ramón
22/01/2009 - 20:13 | Informe spam
Hola Alejandro

Donde entra el asunto de los indices en las vistas, tiene realmente alguna
implicacion en eso o solo es para agilizar las busquedas, como en las
tablas?


"Alejandro Mesa" escribió en el
mensaje news:
Toranzo,

No eres el primer cliente en tener este problema, el cual es producto de
un
mal uso
de esta clausula, ademas de depender de una facilidad que no esta
documentada.

La unica forma de garantizar un resultado ordenado, es usando la clausula
"order by" en la sentencia que retorna la data, en este caso la sentencia
que
referencia a la vista.

Te recomiendo que cambies todas esas vistas y que uses la clausula en el
lugar correcto. Ah, y recuerda installar el ultimo service pack, pues este
problema se corrige al instalar el service pack 2 de SS 2005, aunque yo te
recomiendo que instales el ultimo, que es el 3.

SQL Server 2005 Service Pack 3
http://www.microsoft.com/downloads/...laylang=en


AMB

"toranzo" wrote:

Tengo una aplicación sql 2000 al pasarlo a sql 2005 la ordenación esta
fallado, en la vista ya no funciona el order by, hay que realizarlo en la
aplicación.



Tampoco me funcion poniendo comatibilidad 80.



Existe alguna otra forma



Respuesta Responder a este mensaje
#9 Alejandro Mesa
22/01/2009 - 22:53 | Informe spam
Ramón,

El proposito es agilizar las consultas, de la misma forma que el indice de
un libro te ayuda a encontrar un tema de forma mas rapida, y ayudar al
optimizidor a estimar la cardinalidad o numero de filas que pudieran machar
una expresion mediante las estadisticas que se mantienen de los datos de la
clave de un indice. Ahora, si la operacion requiere cierta data ordenada y
existe algun indice cuya llave incluye la data que se desea, entonces se usa
el indice. Por ejemplo, si tienes un indice clustered por c1 y haces la
consulta:

select c1, c2, c3
from t
order by c1

entonces la maquina puede leer ese indice de forma ordenada, osea en el
mismo orden que el indice y no tendra que ordenar la data como paso extra.
Pero si en cambio usamos:

select c1, c2, c3
from t
order by c2

entonces SQL Server tendra que ordenar el resultado por [c2] aunque halla
recorrido el indice clustered.

Fijate que el ejemplo que pongo usa la clausula "order by", pues de lo
contrario SQL Server puede leer un indice sin seguir el orden de paginas de
acuerdo al orden de la clave. Es la unica forma en que se garantiza que el
resultado de una sentencia select este ordenado, usando la clausula "order
by".

Aca te paso unos articulos que tocan este tema con profuncdidad.

Aqui busca este enuciado "Ordered vs. Unordered Index Scans".
http://www.sql.co.il/books/resources.htm

The Beatles versus the Stone
http://sqlblog.com/blogs/hugo_korne...tones.aspx

The Beatles versus the Stones - the explanation
http://sqlblog.com/blogs/hugo_korne...ation.aspx

AMB


"Ramón" wrote:

Hola Alejandro

Donde entra el asunto de los indices en las vistas, tiene realmente alguna
implicacion en eso o solo es para agilizar las busquedas, como en las
tablas?


"Alejandro Mesa" escribió en el
mensaje news:
> Toranzo,
>
> No eres el primer cliente en tener este problema, el cual es producto de
> un
> mal uso
> de esta clausula, ademas de depender de una facilidad que no esta
> documentada.
>
> La unica forma de garantizar un resultado ordenado, es usando la clausula
> "order by" en la sentencia que retorna la data, en este caso la sentencia
> que
> referencia a la vista.
>
> Te recomiendo que cambies todas esas vistas y que uses la clausula en el
> lugar correcto. Ah, y recuerda installar el ultimo service pack, pues este
> problema se corrige al instalar el service pack 2 de SS 2005, aunque yo te
> recomiendo que instales el ultimo, que es el 3.
>
> SQL Server 2005 Service Pack 3
> http://www.microsoft.com/downloads/...laylang=en
>
>
> AMB
>
> "toranzo" wrote:
>
>> Tengo una aplicación sql 2000 al pasarlo a sql 2005 la ordenación esta
>> fallado, en la vista ya no funciona el order by, hay que realizarlo en la
>> aplicación.
>>
>>
>>
>> Tampoco me funcion poniendo comatibilidad 80.
>>
>>
>>
>> Existe alguna otra forma
>>
>>
>>



Respuesta Responder a este mensaje
#10 Carlos M. Calvelo
23/01/2009 - 00:18 | Informe spam
Hola Alejandro,

No se estará refiriendo Ramón a 'vistas indizadas' en especial?
(me pregunto)

Porque entonces también entra, no solo el tema de eficiencia
por medio de índices, sino también por medio de derivación
de datos (materialización).

Saludos,
Carlos
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida