2011-12-26 3 views
5

SQL Server에서 이상한 오류가 발생했으며 이에 대한 설명이 필요합니다.하위 쿼리의 SQL Server ORDER BY 절

나는, 예를

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

는 다음과 같은 오류

ORDER BY 절은 뷰, 인라인 함수에 유효하지 않습니다

를 throw를 들어, 하위 쿼리에 ORDER 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 

중, 상단 행 개수를 선택할 수 있다는 의미 하는가 . 오류의 원인은 무엇입니까?

+1

SQL 2000에서 뷰, 파생 테이블, 인라인 함수 및 하위 쿼리의 ORDER BY 절 동작 http://support.microsoft.com/kb/841845/en-us –

답변

4

가 하위 쿼리를 정렬하고 그것에서 그 선택 일 이후에 더 많은 의미가 없다 -이 최상위이 명령을 받게됩니다 선택하는 것이 보장되지, 그래서 - 내부 쿼리를 주문하는 것은 의미가 없다

그러나 TOP 문을 사용하여 내부 쿼리를 주문한 경우 최상위 수준 선택이 이러한 방식으로 정렬된다는 보장도 없지만 내부 쿼리의 최상위 X 행만 포함하므로 이미 의미가 있습니다.