2011-12-26 23 views
5

SQL Serverで奇妙なエラーが発生しており、その説明が必要です。サブクエリのSQL Server ORDER BY句

IはサブクエリでORDER BYを記述する場合、インスタンス

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

ことが句BY次のエラー

順序は、ビュー、インライン関数、派生 テーブル、サブクエリでは無効であるスローTOPまたはFOR XMLも指定されていない限り、共通テーブル式を使用します。

しかし、私はサブクエリでTOPを使用する場合、それは通常そう

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

動作しますが、それは私がその場合、代わりに

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

の、Aの一番上の行数を選択できることを意味してい。エラーの理由は何ですか?

+1

SQL 2000でのビュー、派生テーブル、インライン関数、およびサブクエリでのORDER BY句の動作http://support.microsoft.com/kb/841845/en-us –

答えて

4

は、サブクエリをソートすると、それから、その選択何か後に何もあまり意味がありません - トップレベルが発注されます選択することを保証するものではありませんが、そう - 内部クエリを注文しても意味はありません

しかし、 TOPステートメントで内側のクエリを注文する場合、トップレベルの選択がこのような順序で行われることは保証されませんが、内側のクエリからのトップXの行のみが含まれます。