首页 > 数据库 > mysql教程 > 如何使用 OFFSET 和 FETCH NEXT 在 SQL Server 中实现查询分页以及旧版本的替代方案?

如何使用 OFFSET 和 FETCH NEXT 在 SQL Server 中实现查询分页以及旧版本的替代方案?

DDD
发布: 2025-01-10 20:57:41
原创
444 人浏览过

How to Implement Query Paging in SQL Server Using OFFSET and FETCH NEXT, and Alternatives for Older Versions?

使用 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板