sql >> Base de Datos >  >> RDS >> Mysql

Equivalente de la cláusula LIMIT de MySQL para SQL SERVER

En SQL Server 2012, hay soporte para el estándar ANSI OFFSET / FETCH sintaxis. Yo blog sobre esto y aquí está el documento oficial (esta es una extensión de ORDER BY ). Su sintaxis convertida para SQL Server 2012 sería:

SELECT ID, Name, Price, Image 
  FROM Products 
  ORDER BY ID ASC 
  OFFSET (@start_from - 1) ROWS -- not sure if you need -1
    -- because I don't know how you calculated @start_from
  FETCH NEXT @items_on_page ROWS ONLY;

Antes de eso, debe usar varias soluciones alternativas, incluido el ROW_NUMBER() método. Consulte este artículo y la discusión de seguimiento . Si no está en SQL Server 2012, no puede usar la sintaxis estándar o LIMIT no estándar de MySQL pero puede usar una solución más detallada como:

;WITH o AS
(
    SELECT TOP ((@start_from - 1) + @items_on_page)
         -- again, not sure if you need -1 because I 
         -- don't know how you calculated @start_from
      RowNum = ROW_NUMBER() OVER (ORDER BY ID ASC)
      /* , other columns */
    FROM Products
)
SELECT 
    RowNum
    /* , other columns */
FROM
    o
WHERE
    RowNum >= @start_from
ORDER BY
    RowNum;

Hay muchas otras formas de despellejar a este gato, es poco probable que esta sea la más eficiente, pero en cuanto a la sintaxis, probablemente sea la más simple. Sugiero revisar los enlaces que publiqué, así como las sugerencias duplicadas anotadas en los comentarios a la pregunta.