你现在可以做到。
您需要做的就是编写一个采用 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 附加到 y
ROWS (@PageSize * (@PageNumber - 1)) TO (@PageSize * @PageNumber -1)
对于 base-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