In SQL Server 2012 wird der ANSI-Standard OFFSET
unterstützt / FETCH
Syntax. Ich habe gebloggt das
und hier ist das offizielle Dokument (Dies ist eine Erweiterung von ORDER BY
). Ihre für SQL Server 2012 konvertierte Syntax wä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;
Zuvor müssen Sie verschiedene Problemumgehungen verwenden, einschließlich ROW_NUMBER()
Methode. Siehe diesen Artikel
und die Nachfolgediskussion
. Wenn Sie nicht SQL Server 2012 verwenden, können Sie die Standardsyntax oder das nicht standardmäßige LIMIT
von MySQL nicht verwenden Sie können jedoch eine ausführlichere Lösung verwenden, z. B.:
;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;
Es gibt viele andere Möglichkeiten, diese Katze zu häuten, dies ist wahrscheinlich nicht die effizienteste, aber syntaktisch wahrscheinlich die einfachste. Ich schlage vor, die von mir geposteten Links sowie die doppelten Vorschläge in den Kommentaren zu der Frage zu überprüfen.