あなたは今それをすることができました。
必要なのは、Query と PageSize と PageNumber を受け取る拡張メソッドを作成することだけです。
OFFSET @PageSize * (@PageNumber - 1) ROWS FETCH NEXT @PageSize ROWS ONLY;
行をクエリに追加して実行します。
クエリには必ず ORDER-BY 句が必要であることに注意してください (少なくとも T-SQL では)。
これは、MS-SQL (2012 以降)、PostgreSQL (8.4 以降)、および Oracle (12c 以降) で機能します。
MySQL の場合、LIMIT オフセット、page_size を追加する必要があります。
LIMIT @PageSize * (@PageNumber - 1), @PageSize
Firebirdの場合、ROWS x TO yを追加する必要があります
ROWS (@PageSize * (@PageNumber - 1)) TO (@PageSize * @PageNumber -1)
ベース 1 のインデックスの場合、startoffset_base1 から endoffset_base1 までになります。
StartAt @PageSize * (pagenum - 1) + 1 EndAt @PageSize * (pagenum - 1) + @PageSize
例:
DECLARE @PageSize int
DECLARE @PageNumber int
SET @PageSize = 5
SET @PageNumber = 2
SELECT * FROM T_Users
ORDER BY USR_ID
-- Must contain "ORDER BY"
OFFSET @PageSize * (@PageNumber - 1) ROWS FETCH NEXT @PageSize ROWS ONLY;
さまざまな RDBMS の構文については、
http://www.jooq.org/doc/3.5/manual/sql-building/sql-statements/select-statement/limit-clause/を参照してください。
検証:
DECLARE @PageSize int
SET @PageSize = 5
;WITH CTE AS
(
SELECT 1 as pagenum
UNION ALL
SELECT pagenum+1 AS pagenum
FROM CTE
WHERE CTE.pagenum < 100
)
SELECT
pagenum
,@PageSize * (pagenum - 1) AS StartOFFSETBase0
--,@PageSize * (pagenum - 1) + @PageSize - 1 AS EndOFFSETBase0
,@PageSize * pagenum - 1 AS EndOFFSETBase0 -- Simplified
,@PageSize * (pagenum - 1) + 1 AS StartOFFSETBase1
,@PageSize * (pagenum - 1) + @PageSize AS EndOFFSETBase1
FROM CTE