正如其他答案所指出并在其文档中记录的那样,SQL Server已将OFFSETand 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;