2011-12-26 21 views
5

Me enfrenta un error extraño en SQL Server y quiero alguna explicación al respecto.Cláusula ORDER BY de SQL Server en la subconsulta

Cuando escribo ORDER BY en una subconsulta, por ejemplo

SELECT a FROM (SELECT * FROM A ORDER BY a) T 

que arroja el siguiente error

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

Pero cuando se utiliza TOP en subconsulta funciona normalmente

SELECT a 
FROM 
    (SELECT TOP 1000000 * FROM A ORDER BY a) T 

Así que, ¿significa que puedo seleccionar recuento fila superior de A, en lugar de

SELECT a FROM (SELECT * FROM A ORDER BY a) T 

En ese caso . ¿Cuál es la razón del error?

+1

Comportamiento de la cláusula ORDER BY en vistas, tablas derivadas, funciones en línea y subconsultas en SQL 2000 http://support.microsoft.com/kb/841845/en-us –

Respuesta

4

No hay mucho sentido para ordenar la sub consulta y después de que seleccione algo de ella - no se garantiza que el alto nivel de selección, se ordenará, por lo que - no hay sentido para ordenar la consulta interna

Pero si ordena la consulta interna con la instrucción TOP, tampoco garantiza que la selección de nivel superior se ordene de esa manera, pero contendrá solo las primeras X filas de la consulta interna, eso ya tiene sentido.

Cuestiones relacionadas