In SQL Server 2012 è disponibile il supporto per lo standard ANSI OFFSET
/ FETCH
sintassi. Ho bloggato su questo
ed ecco il documento ufficiale (questa è un'estensione di ORDER BY
). La tua sintassi convertita per SQL Server 2012 sarebbe:
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;
Prima di ciò, devi utilizzare varie soluzioni alternative, incluso ROW_NUMBER()
metodo. Vedi questo articolo
e la discussione successiva
. Se non utilizzi SQL Server 2012, non puoi utilizzare la sintassi standard o il LIMIT
non standard di MySQL ma puoi usare una soluzione più dettagliata come:
;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;
Ci sono molti altri modi per scuoiare questo gatto, è improbabile che sia il più efficiente, ma dal punto di vista della sintassi è probabilmente il più semplice. Suggerisco di rivedere i link che ho postato così come i suggerimenti duplicati annotati nei commenti alla domanda.