【问题标题】:SQL Server create ordered #Temp tableSQL Server 创建有序的#Temp 表
【发布时间】:2012-07-31 20:31:29
【问题描述】:

我尝试创建有序的#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 ;

但我得到错误:

消息 1033,第 15 级,状态 1,第 82 行
ORDER BY 子句无效 在视图、内联函数、派生表、子查询和公共 表表达式,除非还指定了 TOP 或 FOR XML。

如何创建有序临时表?

【问题讨论】:

  • 谷歌这条消息。这是一个众所周知的错误。
  • 哦,谢谢,我找到了解决方案stackoverflow.com/questions/985921/…
  • 附带说明:您不能拥有 ordered 表 - 临时或非临时表。当您从 SQL 中的表中选择时,除非您明确指定 ORDER BY - 没有保证顺序

标签: sql sql-server tsql


【解决方案1】:

错误是因为您试图在公用表表达式中执行 Order By,这是不允许的。

从您发布的内容来看,您的 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; 

(这也不意味着需要临时表......)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    相关资源
    最近更新 更多