2011-12-26 3 views
5

Я столкнулся с странной ошибкой в ​​SQL Server, и мне нужно некоторое объяснение.Предложение SQL Server ORDER BY в подзапросе

Когда я пишу ORDER BY в подзапросе, например

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

он выдает следующее сообщение об ошибке

Поручения п недействительна в представлениях, встроенных функциях, полученные таблицы, подзапросы, и общие табличные выражения, если не указано значение TOP или FOR .

Но когда я использую TOP в подзапрос работает нормально

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

Таким образом, это означает, что я могу выбрать верхнюю количество строк в A, вместо

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

В этом случае , в чем причина ошибки?

+1

Поведение предложения ORDER BY в представлениях, производных таблицах, встроенных функциях и подзапросах в SQL 2000 http://support.microsoft.com/kb/841845/en-us –

ответ

4

Там нет особого смысла для сортировки подзапрос и после этого выберите что-то из него - это не гарантирует, что на высшем уровне выбора будет заказано, так - нет смысла заказывать внутренний запрос

Но если вы закажете внутренний запрос с оператором TOP - это также не гарантирует, что выбор верхнего уровня будет упорядочен таким образом, но он будет содержать только верхние строки X из внутреннего запроса - это уже имеет смысл.