SQL Server分页查询错误——ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效

本文关键字:查询 派生 表达式 无效 函数 BY ORDER 错误 分页 子句 Server | 更新日期: 2023-09-27 18:02:11

这是一个查询,我正在做返回页面数据到我的web应用程序,以获得前100个元素:

SELECT * FROM (SELECT ROWNUM AS RN, Id,DateTime FROM Schema.MyDb WHERE 
Deleted='F' AND (Code>=2) AND (Type LIKE '%stock%') 
ORDER BY Datetime DESC) WHERE ROWNUM < 
100 AND RN > 0

这在Oracle数据库上工作得很好,但在SQL Server 2012下运行时,我得到以下错误:

Message 1033, Level 15, State 1, Server NBOOK'SQLEXPRESS, Line 1:
The ORDER BY clause is invalid in views, inline functions, derived tables, subqu
eries, and common table expressions, unless TOP, OFFSET or FOR XML is also speci
fied.

关于如何解决这个问题并使其在不丢失逻辑的情况下工作(最终结果需要是有序查询的前100行)的任何提示?

SQL Server分页查询错误——ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效

rownum是Oracle特有的。在SQL Server(和Oracle)中,您应该使用row_number()代替:

SELECT *
FROM (SELECT row_number() over (order by DateTime desc) as RN, Id, DateTime
      FROM Schema.MyDb
      WHERE Deleted = 'F' AND (Code >= 2) AND (Type LIKE '%stock%') 
     ) t
WHERE RN < 100 AND RN > 0;

此外,子查询在SQL Server中需要一个别名。以上将在两个数据库中工作

您的订单在子查询中。把它拿出来,你应该很好。