SQL Server 2012では、ANSI標準のOFFSET
がサポートされています。 / FETCH
構文。私はORDER BY
の拡張機能です )。 SQLServer2012用に変換された構文は次のようになります。
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;
その前に、ROW_NUMBER()
を含むさまざまな回避策を使用する必要があります 方法。 この記事
を参照してください およびLIMIT
を使用することはできません。 ただし、次のようなより詳細なソリューションを使用できます。
;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;
この猫の皮を剥ぐ方法は他にもたくさんあります。これが最も効率的である可能性は低いですが、構文的にはおそらく最も簡単です。投稿したリンクと、質問へのコメントに記載されている重複した提案を確認することをお勧めします。