Esta es la contestación más acertada que te podemos brindar, pero mírala pausadamente y valora si es compatible a tu trabajo.
Solución:
SQL Server ha implementado el OFFSET
y FETCH
cláusulas como parte del ORDER BY
cláusula, como lo señalan las otras respuestas y documentado en su documentación.
El estándar SQL, por otro lado, tiene estas dos cláusulas como independientes:
::=
[ ]
[ ] [ ] [ ]
Si alguien quiere que esta función se implemente en total conformidad con el estándar, siempre puede realizar una solicitud al equipo de SQL Server, a través del canal Connect. De hecho, MS ha comentado, en una solicitud diferente sobre compensación y recuperación:
Conectar elemento: SQL Denali: agregar contador de filas totales a
SELECT
declaración – por Alexey RokhinRespuesta: Publicado por Microsoft el 24/11/2010 a las 11:34
El requerimiento que
OFFSET/FETCH
requiereORDER BY
es una restricción en esta versión. En el estándar ANSI SQL (SQL:2011) donde el nuevoOFFSET/FETCH
se proponen 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 hacerOFFSET
una palabra clave reservada. Es posible que lo eliminemos en el futuro.Ahora con respecto a…
Hasta entonces, si uno quiere usar OFFSET
y FETCH
sin un especifico ORDER BY
, una solución consiste en agregar una cláusula order by de “no hacer nada”. Ejemplo:
SELECT
...
ORDER BY (SELECT NULL)
OFFSET 0 ROWS
FETCH NEXT 1 ROWS ONLY;
Como se indica en la parte superior de la documentación sobre OFFSET
..FETCH
La cláusula OFFSET-FETCH le brinda una opción para obtener solo una ventana o página de resultados del conjunto de resultados. OFFSET-FETCH solo se puede usar con la cláusula ORDER BY.
…
ORDER BY es obligatorio para usar la cláusula OFFSET y FETCH.
Asi que,
SELECT *
FROM ( VALUES (1),(2),(3) ) AS t(x)
ORDER BY t.[x] /* <-- ADD ME TO BE HAPPY */
OFFSET 0 ROWS
FETCH NEXT 1 ROWS ONLY;
No es tan práctico para un simple LIMIT
si eso es lo que buscas, querrás quedarte con TOP
.
Según la referencia, el OFFSET
cláusula es parte de ORDER BY
en el servidor SQL. También tendrá que agregar el ROWS
palabra clave después de la OFFSET
especificación:
SELECT *
FROM ( VALUES (1),(2),(3) ) AS t(x)
ORDER BY x
OFFSET 0 ROWS
FETCH FIRST 1 ROWS ONLY;
Aquí puedes ver las reseñas y valoraciones de los usuarios
Recuerda que puedes mostrar este enunciado si si solucionó tu problema.