No SQL Server 2012, há suporte para o padrão ANSI
OFFSET
/ FETCH
sintaxe. Eu blog sobre isso
e aqui está o documento oficial (esta é uma extensão para ORDER BY
). Sua sintaxe convertida para o SQL Server 2012 seria: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 disso, você precisa usar várias soluções alternativas, incluindo o
ROW_NUMBER()
método. Consulte este artigo
e a discussão posterior
. Se você não estiver no SQL Server 2012, não poderá usar a sintaxe padrão ou o LIMIT
não padrão do MySQL mas você pode usar uma solução mais detalhada, 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;
Existem muitas outras maneiras de esfolar esse gato, é improvável que seja a mais eficiente, mas a sintaxe é provavelmente a mais simples. Sugiro revisar os links que postei, bem como as sugestões duplicadas observadas nos comentários da pergunta.