2012-07-31 89 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; 

(这并不意味着需要一个临时表,要么...)