正如其他答案所指出并在其文档中记录的那样,SQL Server已将OFFSET
and FETCH
子句实现为子句的一部分ORDER BY
。
另一方面,SQL标准具有以下两个独立的子句:
<query expression> ::=
[ <with clause> ] <query expression body>
[ <order by clause> ] [ <result offset clause> ] [ <fetch first clause> ]
如果有人希望完全符合该标准地实施此功能,则他们总是可以通过Connect通道向SQL Server团队提出请求。实际上,MS已在有关offset和fetch的另一个请求中发表了评论:
连接项目:SQL Denali:将总行计数器添加到SELECT
语句中 -作者:Alexey Rokhin
答案:由Microsoft发表于24/11 / 2010,11:34
要求是OFFSET/FETCH
需要ORDER BY
在此版本的限制。在OFFSET/FETCH
提出新子句的ANSI SQL标准(SQL:2011)中,它ORDER BY
是可选的。SQL Server中的限制与我们的解析器技术中的限制有关,解析器技术中的限制不能在不创建OFFSET
保留关键字的情况下处理可选语法。我们将来可能会删除它。
现在关于...
在此之前,如果要使用OFFSET
并且FETCH
没有特定说明ORDER BY
,一种解决方法是按子句添加“不执行任何操作”。例:
SELECT
...
ORDER BY (SELECT NULL)
OFFSET 0 ROWS
FETCH NEXT 1 ROWS ONLY;