2012-07-31 84 views
1

我嘗試創建有序#TEMP表:SQL Server中創建有序#TEMP表

WITH Ordered AS (
SELECT ROW_NUMBER() OVER (ORDER BY [Quality] DESC) AS RowNumber, ImageID, Quality, Border, IsBest 
    FROM [CatalogImages].[dbo].[Images] ORDER BY Quality) 

SELECT * 
    INTO #Temp 
    FROM Ordered ; 

SELECT * FROM #Temp ; 

,但我得到的錯誤:

Msg 1033, Level 15, State 1, Line 82
The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.

如何建立有序的臨時表?

+2

谷歌的消息。這是一個衆所周知的錯誤。 – usr 2012-07-31 20:36:22

+0

哦,謝謝,我發現解決方案http://stackoverflow.com/questions/985921/sql-error-with-order-by-in-subquery – testCoder 2012-07-31 20:39:29

+3

作爲一個側面說明:你不能有一個**命令**表 - 暫時或不。當你從SQL中的表中選擇時,除非你明確地指定了** ORDER BY' - 那裏**沒有保證的順序** – 2012-07-31 20:48:39

回答

1

錯誤是因爲您嘗試在公共表表達式中執行順序,這是不允許的。

從您發佈的內容看,您的CTE不是必需的。你可能只是這樣做:

SELECT ROW_NUMBER() OVER (ORDER BY [Quality] DESC) AS RowNumber, ImageID, Quality, Border, IsBest 
INTO #Temp 
ORDER BY Quality; 

SELECT * 
FROM #Temp 
ORDER BY Quality; 

(這並不意味着需要一個臨時表,要麼...)