SQL Server a implémenté les clauses OFFSET
et FETCH
dans le cadre de la ORDER BY
clause, comme indiqué par les autres réponses et documenté dans leur documentation.
Le standard SQL de l'autre côté, a ces deux clauses comme indépendantes:
<query expression> ::=
[ <with clause> ] <query expression body>
[ <order by clause> ] [ <result offset clause> ] [ <fetch first clause> ]
Si quelqu'un souhaite que cette fonctionnalité soit implémentée en totale conformité avec la norme, il peut toujours faire une demande à l'équipe SQL Server, via le canal Connect. En fait, MS a commenté - dans une demande différente sur l'offset et la récupération:
Élément de connexion: SQL Denali: ajouter un compteur de lignes totales à la SELECT
déclaration - par Alexey Rokhin
Réponse: Publié par Microsoft le 24/11/2010 à 11:34
L'exigence qui OFFSET/FETCH
requiert ORDER BY
est une restriction dans cette version. Dans la norme ANSI SQL (SQL: 2011) où les nouvelles OFFSET/FETCH
clauses sont proposées, ORDER BY
est facultative. La restriction dans SQL Server est liée à la limitation de notre technologie d'analyse qui ne peut pas gérer la syntaxe facultative sans créer OFFSET
un mot clé réservé. Nous pouvons le supprimer à l'avenir.
Maintenant, en ce qui concerne ...
Jusque-là, si l'on veut utiliser OFFSET
et FETCH
sans spécificité ORDER BY
, une solution consiste à ajouter une clause order by "ne rien faire". Exemple:
SELECT
...
ORDER BY (SELECT NULL)
OFFSET 0 ROWS
FETCH NEXT 1 ROWS ONLY;