В SQL Server 2012 има поддръжка за стандарта ANSI OFFSET
/ FETCH
синтаксис. Аз бложих за това
и ето официалният документ (това е разширение към ORDER BY
). Вашият синтаксис, преобразуван за SQL Server 2012, би бил:
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;
Преди това трябва да използвате различни решения, включително ROW_NUMBER()
метод. Вижте тази статия
и последващата дискусия
. Ако не сте на SQL Server 2012, не можете да използвате стандартен синтаксис или нестандартния LIMIT
на MySQL но можете да използвате по-подробно решение като:
;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;
Има много други начини да одирате тази котка, това е малко вероятно да е най-ефективният, но от гледна точка на синтаксиса вероятно е най-простият. Предлагам да прегледате връзките, които публикувах, както и дублиращите се предложения, отбелязани в коментарите към въпроса.