W SQL Server 2012 jest wsparcie dla standardu ANSI OFFSET
/ FETCH
składnia. blogowałem o to
a oto oficjalny dokument (jest to rozszerzenie ORDER BY
). Twoja składnia przekonwertowana dla SQL Server 2012 będzie wyglądała następująco:
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;
Wcześniej musisz użyć różnych obejść, w tym ROW_NUMBER()
metoda. Zobacz ten artykuł
oraz dalszą dyskusję
. Jeśli nie korzystasz z SQL Server 2012, nie możesz używać standardowej składni ani niestandardowego LIMIT
MySQL ale możesz użyć bardziej szczegółowego rozwiązania, takiego jak:
;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;
Istnieje wiele innych sposobów na skórowanie tego kota, prawdopodobnie nie jest to najskuteczniejszy, ale pod względem składni jest prawdopodobnie najprostszy. Proponuję przejrzeć zamieszczone przeze mnie linki, a także zduplikowane sugestie odnotowane w komentarzach do pytania.