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

C# SQL Server分页查询错误-ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,c#,sql,sql-server,oracle,C#,Sql,Sql Server,Oracle,下面是我正在做的一个查询,将分页数据返回到我的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 关于如何修复此问题并使其在不丢失逻

下面是我正在做的一个查询,将分页数据返回到我的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
关于如何修复此问题并使其在不丢失逻辑的情况下工作(最终结果必须是有序查询的前100行)的任何提示


谢谢您的帮助。

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

你的订单位于子查询中。把它拿出来,你应该会很好。

rownum是Oracle特有的。在SQL Server和Oracle中,应改用行号:

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中的别名。以上两种数据库都适用。

rownum是Oracle特有的。在SQL Server和Oracle中,应改用行号:

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中的别名。上述两种数据库都可以使用。

是否会过度导致查询开销,因为它是一种分析功能?在我的服务器上将经常调用此查询…@Mendez。是的,有点。这不应该比订单更糟糕。您可以在SQL Server上使用top。答案中的版本在两个数据库中都有效。在SQLServer和Oracle中都可以正常工作。谢谢你的帮助!由于查询是一个分析函数,是否会过度导致查询开销?在我的服务器上将经常调用此查询…@Mendez。是的,有点。这不应该比订单更糟糕。您可以在SQL Server上使用top。答案中的版本在两个数据库中都有效。在SQLServer和Oracle中都可以正常工作。谢谢你的帮助!