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.