SQL Server ha implementado las cláusulas OFFSET
y FETCH
como parte de la ORDER BY
cláusula, según lo señalado por las otras respuestas y documentado en su documentación.
El estándar SQL en el otro lado, tiene ambas cláusulas como independientes:
<query expression> ::=
[ <with clause> ] <query expression body>
[ <order by clause> ] [ <result offset clause> ] [ <fetch first clause> ]
Si alguien quiere que esta característica se implemente en total conformidad con el estándar, siempre puede hacer una solicitud al equipo de SQL Server, a través del canal Connect. De hecho, MS ha comentado, en una solicitud diferente sobre desplazamiento y recuperación:
Conecte el elemento: SQL Denali: agregue el contador total de filas a la SELECT
declaración - por Alexey Rokhin
Respuesta: Publicado por Microsoft el 24/11/2010 a las 11:34
El requisito que OFFSET/FETCH
requiere ORDER BY
es una restricción en esta versión. En el estándar ANSI SQL (SQL: 2011) donde OFFSET/FETCH
se proponen las nuevas cláusulas, ORDER BY
es opcional. La restricción en SQL Server tiene que ver con la limitación en nuestra tecnología de analizador que no puede manejar la sintaxis opcional sin hacer OFFSET
una palabra clave reservada. Podemos eliminarlo en el futuro.
Ahora con respecto a ...
Hasta entonces, si uno quiere usar OFFSET
y FETCH
sin un específico ORDER BY
, una solución alternativa es agregar una orden de "no hacer nada" por cláusula. Ejemplo:
SELECT
...
ORDER BY (SELECT NULL)
OFFSET 0 ROWS
FETCH NEXT 1 ROWS ONLY;