In SQL Server 2012 is er ondersteuning voor de ANSI-standaard OFFSET
/ FETCH
syntaxis. Ik heb geblogd over dit
en hier is het officiële document (dit is een uitbreiding op ORDER BY
). Uw syntaxis geconverteerd voor SQL Server 2012 zou zijn:
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;
Daarvoor moet u verschillende tijdelijke oplossingen gebruiken, waaronder de ROW_NUMBER()
methode. Zie dit artikel
en de vervolgdiscussie
. Als u geen SQL Server 2012 gebruikt, kunt u de standaardsyntaxis of de niet-standaard LIMIT
van MySQL niet gebruiken maar u kunt een uitgebreidere oplossing gebruiken, zoals:
;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;
Er zijn veel andere manieren om deze kat te villen. Het is onwaarschijnlijk dat dit de meest efficiënte is, maar qua syntaxis is dit waarschijnlijk het eenvoudigst. Ik raad aan om de links die ik heb gepost te bekijken, evenals de dubbele suggesties die zijn vermeld in de opmerkingen bij de vraag.