使用 SQL 的 OFFSET 和 FETCH NEXT 实现分页查询 (SQL Server 2012 及以上版本)
本例演示如何为查询添加分页功能,以检索最新讨论的论坛帖子。目标是将结果限制在指定的行范围内(例如,“第 10 到 20 条”)。
SQL Server 2012 引入了 OFFSET 和 FETCH NEXT 关键字,简化了分页的实现:
<code class="language-sql">SELECT col1, col2, ... FROM ... WHERE ... ORDER BY -- 必须包含 ORDER BY 语句 -- 分页语句 OFFSET 10 ROWS -- 跳过 10 行 FETCH NEXT 10 ROWS ONLY; -- 获取 10 行</code>
修改原始查询:
<code class="language-sql">SELECT PostId FROM ( SELECT PostId, MAX(Datemade) AS LastDate FROM dbForumEntry GROUP BY PostId ) AS SubQueryAlias ORDER BY LastDate DESC OFFSET 10 ROWS -- 跳过 10 行 FETCH NEXT 10 ROWS ONLY; -- 获取 10 行</code>
SQL Server 2008 及更早版本中的分页
在 SQL Server 2012 之前的版本中,可以使用 ROW_NUMBER() 和 COUNT() 函数结合子查询来实现分页。示例如下:
<code class="language-sql">DECLARE @Start INT DECLARE @End INT SELECT @Start = 10, @End = 20; WITH PostCTE AS ( SELECT PostId, MAX(Datemade) AS LastDate ,ROW_NUMBER() OVER (ORDER BY PostId) AS RowNumber FROM dbForumEntry GROUP BY PostId ) SELECT PostId, LastDate FROM PostCTE WHERE RowNumber BETWEEN @Start AND @End;</code>
通过调整 @Start 和 @End 变量,可以指定所需的页面范围。
以上是如何使用 OFFSET 和 FETCH NEXT 在 SQL Server 中实现查询分页以及旧版本的替代方案?的详细内容。更多信息请关注PHP中文网其他相关文章!