estoy tratando de hacer algo como:LÍMITE 10..20 en SQL Server
SELECT * FROM table LIMIT 10,20
o
SELECT * FROM table LIMIT 10 OFFSET 10
pero utilizando SQL Server
La única solution I found parece una exageración:
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY name) as row FROM sys.databases
) a WHERE row > 5 and row <= 10
También found:
SELECT TOP 10 * FROM stuff;
... pero no es lo que quiero hacer ya que no puedo especificar el límite inicial.
¿Hay alguna otra manera de hacerlo?
Además, solo curiosidad, ¿hay alguna razón por la cual SQL Server no admite la función LIMIT
o algo similar? No quiero ser malo, pero eso realmente suena como algo que un DBMS necesita ... Si lo hace, ¡entonces lo siento por ser tan ignorante! He estado trabajando con MySQL y SQL + durante los últimos 5 años, así que ...
El uso de un CTE de 'ROW_NUMBER()' y limitando con 'top' para el ancho del rango y una condición 'WHERE' para un límite del rango es lo mejor que he podido lograr. También he notado un rendimiento mucho mejor si la cláusula 'TOP' usa un literal en lugar de variable – Jodrell
El problema con cualquier solución que implique el ROW_NUMBER() es que si no sabes de antemano qué columnas tendrás, y tú tienen uniones, y las tablas unidas tienen el mismo nombre de columna, obtendrás una "La columna 'xxx' fue especificada varias veces". Esto no es tan raro como podría sonar inicialmente. Yo uso Dapper, y todas mis tablas tienen una columna Id. Dapper se divide y mapea en eso, así que no quiero cambiarles el nombre, pero no puedo usar el alias SELECT * FROM ([consulta original]). ¡Todavía no he encontrado una solución! –
Posible duplicado de [Cómo implementar LIMIT con Microsoft SQL Server?] (Https://stackoverflow.com/questions/603724/how-to-implement-limit-with-microsoft-sql-server) – kenorb