I SQL Server 2012 er der understøttelse af ANSI-standarden OFFSET
/ FETCH
syntaks. Jeg bloggede om dette
og her er det officielle dokument (dette er en udvidelse til ORDER BY
). Din syntaks konverteret til SQL Server 2012 ville være:
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;
Før det skal du bruge forskellige løsninger, herunder ROW_NUMBER()
metode. Se denne artikel
og opfølgende diskussion
. Hvis du ikke er på SQL Server 2012, kan du ikke bruge standardsyntaks eller MySQL's ikke-standardiserede LIMIT
men du kan bruge en mere udførlig løsning såsom:
;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;
Der er mange andre måder at flå denne kat på, det er usandsynligt, at det er den mest effektive, men syntaksmæssigt er det nok det enkleste. Jeg foreslår, at du gennemgår de links, jeg postede, samt de duplikerede forslag, der er noteret i kommentarerne til spørgsmålet.