I SQL Server 2012 finns det stöd för ANSI-standarden OFFSET
/ FETCH
syntax. Jag bloggade om detta
och här är det officiella dokumentet (detta är ett tillägg till ORDER BY
). Din syntax som konverteras för SQL Server 2012 skulle vara:
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;
Innan dess måste du använda olika lösningar, inklusive ROW_NUMBER()
metod. Se denna artikel
och uppföljningsdiskussionen
. Om du inte använder SQL Server 2012 kan du inte använda standardsyntax eller MySQL:s icke-standardiserade LIMIT
men du kan använda en mer utförlig lösning 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;
Det finns många andra sätt att flå den här katten, det är osannolikt att det är det mest effektiva men syntaxmässigt är det förmodligen enklast. Jag föreslår att du granskar länkarna jag har lagt upp samt de dubbletter av förslagen i kommentarerna till frågan.