Saltar al contenido

Error de SQL Server, “Uso no válido de la opción FIRST en la instrucción FETCH”.

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 Rokhin

Respuesta: Publicado por Microsoft el 24/11/2010 a las 11:34

El requerimiento que OFFSET/FETCH requiere ORDER BY es una restricción en esta versión. En el estándar ANSI SQL (SQL:2011) donde el nuevo OFFSET/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 hacer OFFSET 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *