No existe offset (antes decia: LIMIT) en MS SQL Server

Así como suena el titulo, en Microsoft SQL Server no existe la función limit , para implementarla tienes que usar algunos trucos con subconsultas., algo tan sencillo en MySQL como: SELECT * FROM miTabla LIMIT 2,10 en SQL Server se vuelve una calamidad.

Buscando en Internet, encontré en Foros del Web una explicación de como hacer funcionar, se tiene que poner una subconsulta SQL con algo que diga: ROW_NUMBER() OVER (ORDER BY campo) as NumRows y despues se hace un WHERE con su respectivo Between para poner el limite: WHERE NumRows BETWEEN 2 AND 10

Aca un ejemplo más elaborado:

SELECT *
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY mi_Campo1) AS NumRows, *
FROM mi_Tabla
) as AS_NumRows
WHERE AS_NumRows.NumRows BETWEEN 10 AND 20

Si se requiere algún WHERE en nuestra consulta SQL se debe de meter en la subquery, en caso que no tengamos ningun campo a ordenar se cambia lo que tiene ROW_NUMBER, ORDER BY por la siguiente información:

ROW_NUMBER() OVER (ORDER BY (SELECT 1))

Y listo!.., no he probado el rendimiento pero pues aquí una solución extra.

8 thoughts on “No existe offset (antes decia: LIMIT) en MS SQL Server

  1. Pingback: No existe LIMIT en MS SQL Server « DbRunas – Noticias y Recursos sobre Bases de Datos

      • hola oviedo hablando de ese detalle has podido resolver eso quisiera entregar a mi usuario la posibilidad de navegar cada una cierta cantidad de registros la tabla ya tiene muchos registro y me vendria bien para acelarar las consultas

        • pues con lo del paginador y el limit, si usas codeigniter + el truco de aquí (modificando la libreria de mssql) funciona bien…, de rendimiento de la base de datos la verdad no he checado cuando son miles de registros, todavía no llego a ese caso jejejeje..,

  2. Creo que el título está mal… ya que limit existe, lo que no existe es offset.

    Para el LIMIT, ocupa TOP:

    SELECT TOP 10 * FROM tabla
    Eso selecciona los primeros 10.

    Para el offset, bueno, ahí hay que poner toda esa chorrada de código que explicas. Entrenos… no sé cuál es el gusto de Microsoft de complicarnos la vida con este tipo de cosas que son tan básicas.

    Saludos.

  3. Es una broma! es PENOSO!! rio por no llorar, estamos desarrollando una aplicación para una correduria de seguros y usan SQL Server para sus bases de datos. ES PARA LLORAR, en serio, me parece la cosa más bochornosa por parte de Microsoft que he visto nunca. ¿COMO PUEDEN SER TAN INCOMPETENTES? Estoy asqueado, en serio, he perdido ya 1 hora con este tema.

Deja un comentario

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