2011-05-05 24 views
6

En this answer a What are the downsides of using SqlServer Views?, hyprsleepy sugiere que la cláusula ORDER BY no se respeta en las vistas en SQL Server.¿Se respeta ORDER BY en las vistas de SQL Server?

¿Alguien podría explicar por qué este es el caso?

Editar: Gracias por las respuestas, pero no estoy seguro de que ese sea el problema. Sé que no puede agregar una orden por cláusula a una vista y no tengo ningún problema con eso, simplemente agréguela a la declaración SELECT al llamar a la vista, pero mi impresión de la otra pregunta fue que al usar una cláusula de orden por SELECT declaración en una vista no dará los resultados correctos cada vez.

+0

+1 Para la pregunta. Por cierto, tiene perfecto sentido para mí para una vista que no se ordenó –

+0

Estoy de acuerdo, y es por eso que estaba confundido. –

Respuesta

8

SQL Server desarrolladores asumen que cualquier operación de ajuste puede cambiar el orden de los registros por lo que no tiene sentido usar ORDER BY en las definiciones de conjuntos intermedios y solo tiene sentido en las declaraciones finales.

Las vistas se pueden usar en uniones u otras operaciones que invaliden sus pedidos.

Como no puede usar la vista por sí mismo, yo. mi. no escribe vMyView, prefiere escribir SELECT * FROM vMyView, a pesar de que la vista es SELECT per se, puede (y debe) agregar la cláusula ORDER BY a la instrucción SELECT también si necesita un pedido.

Esta es una suposición bastante sensata y, de hecho, hace que el código sea más claro.

0

No puede poner una cláusula ORDER BY en sus vistas. El error exacto es:

"La cláusula ORDER BY no es válida en vistas, funciones en línea, tablas derivadas, subconsultas y expresiones de tablas comunes, a menos que también se especifique TOP o FOR XML."

+0

Puedes crearlo ...sin embargo, no hace nada en 2005 y posteriores, consulte: http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/create-a-sorted-view-in-sql-server-2005--2008 – SQLMenace

1

De wikipedia:

Del mismo modo que las filas de una tabla de base carecen de cualquier ordenación definida, filas disponibles a través de un punto de vista no aparecen con cualquier clasificación defecto. Una vista es una tabla relacional , y el modelo relacional define una tabla como un conjunto de filas . Dado que los conjuntos no están ordenados - por definición - las filas en una vista son no ordenadas, tampoco. Por lo tanto, una cláusula ORDER BY en la definición de vista no tiene sentido.

2

En su definición de vista, incluya TOP 100 PERCENT como solución temporal. Luego puede usar ORDER BY.

EDIT o como SQLMenace señaló TOP 99.99 POR CIENTO.

+1

No hace nada en 2005 en adelante, consulte aquí: http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/create-a-sorted-view-in-sql-server-2005--2008 – SQLMenace

+0

SQLMenace - Desearía poder + repetir tu comentario. ¡No estaba enterado de eso! –

+0

Y aquí está el motivo: http://blogs.msdn.com/b/queryoptteam/archive/2006/03/24/560396.aspx –

3

Tome un vistazo a Create a sorted view in SQL Server 2005 and SQL Server 2008

Hay una manera de hacerlo, pero no es compatible, simplemente emitir una orden por la hora de seleccionar desde el punto de vista

+0

es una cláusula ORDER BY en su instrucción 'SELECT' ¿ejecutada siempre correctamente? –

+0

Sí, así es, simplemente haga 'seleccionar de orden de vista por ' – SQLMenace

+0

Ok - así que no hay ningún problema en lo que a mí respecta, parece que he entendido mal la respuesta a la otra pregunta. –

Cuestiones relacionadas