2011-12-26 33 views
5

我在SQL Server中遇到了一個奇怪的錯誤,我想對它進行一些解釋。子查詢中的SQL Server ORDER BY子句

當我寫ORDER BY在子查詢,例如

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

它引發以下錯誤

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 – 2011-12-26 08:34:03

回答

4

沒有多大意義排序的子查詢和選擇的東西從它之後 - 不保證是頂級選擇將責令,所以 - 是沒有意義的命令內部查詢

但如果您使用TOP語句對內部查詢進行排序 - 它也不能保證頂層選擇將以這種方式排序,但它只包含來自內部查詢的頂部X行 - 這已經是合理的。