首页 > 数据库 >SQL Server的数据库分页的SQL语句

SQL Server的数据库分页的SQL语句

时间:2024-12-09 12:33:29浏览次数:8  
标签:语句 10 PageSize SQL Server 子句 ROW

1、SQL Server 2008及以前版本

在 SQL Server 2008 中,由于没有 OFFSETFETCH 子句,我们通常使用 ROW_NUMBER() 函数来实现分页。以下是一个使用 ROW_NUMBER() 函数进行分页的示例:

DECLARE @PageNumber INT = 2;  -- 当前页码
DECLARE @PageSize INT = 10;   -- 每页显示的记录数

;WITH PaginationCTE AS (
    SELECT 
        ROW_NUMBER() OVER (ORDER BY [YourOrderByColumn]) AS RowNum,
        [YourColumnNames]
    FROM 
        [YourTableName]
)
SELECT 
    [YourColumnNames]
FROM 
    PaginationCTE
WHERE 
    RowNum BETWEEN ((@PageNumber - 1) * @PageSize + 1) AND (@PageNumber * @PageSize);

在这个示例中:

  • @PageNumber 是当前页码,@PageSize 是每页显示的记录数。
  • PaginationCTE 是一个公共表表达式(CTE),它使用 ROW_NUMBER() 函数为表中的每行生成一个唯一的行号。
  • 在 WHERE 子句中,我们使用 RowNum 来筛选出当前页需要显示的记录。

请将 [YourTableName] 替换为你的表名,[YourOrderByColumn] 替换为你的排序列名,[YourColumnNames] 替换为你想要查询的列名。

这种方法适用于 SQL Server 2008,并且可以根据需要调整页码和每页显示的记录数来实现分页查询。

SQL Server 2012 及更高版本

SQL Server 2012 及更高版本除了能用像SQL Server 2008及以前版本的方式之外,还可以使用OFFSETFETCH 子句来实现分页查询。以下是一个基本的分页查询示例:

SELECT [column1], [column2], ...
FROM [YourTableName]
ORDER BY [YourOrderByColumn]
OFFSET [PageSize] ROWS
FETCH NEXT [PageSize] ROWS ONLY;

这里的 [YourTableName] 是你的表名,[column1][column2] 是你想要查询的列名,[YourOrderByColumn] 是你想要排序的列名,[PageSize] 是你每页想要显示的行数。

例如,如果你有一个名为 Orders 的表,并且想要查询第 2 页的数据,每页显示 10 行,你可以这样写:

SELECT [OrderID], [OrderDate], [CustomerID]
FROM [Orders]
ORDER BY [OrderID]
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;

在这个例子中,OrderID 是排序和分页的列,我们跳过第一页的 10 行数据,然后获取接下来的 10 行数据。

请注意,OFFSET 子句指定了要跳过的行数,而 FETCH NEXT 子句指定了要返回的行数。对于第 2 页,你需要跳过第一页的 10 行(即 10),然后获取接下来的 10 行。

这种方法适用于 SQL Server 2012 及更高版本。如果你使用的是 SQL Server 2008 或更早的版本,你需要使用不同的方法,比如使用 ROW_NUMBER() 函数。

标签:语句,10,PageSize,SQL,Server,子句,ROW
From: https://blog.csdn.net/llyfe2006/article/details/144271937

相关文章

  • SqlSever修改自增字段的值
    1.需求有时,我们需要在带自增ID字段的表中插入一些特殊值,比如:9999其他,以把不好归类的都算做其他。2.方法设置表可以插入identity字段,然后插入值,如:setidentity_inserttest_idon;插入后记得关闭3.注意对已经的值无法进行update操作如果插入的值,不是最大(后续在自动......
  • 面经自测——MySQL联合索引/事务的四大特性/持久性怎么做/说一下MySQL日志
    前言本文是作者专门用来自测Java后端相关面试题的,所有问题都是在牛客、知识星球或网上找到的最近最新的面试题,全文回答都是作者按自己的真实水平仿照真实环境的回答,所以答案不一定真实(但回答一定真诚......
  • 从MySQL JOIN 算法角度看如何优化SQL
    作者:京东物流京东物流一、前言在做MySQL的SQL优化时,如果只涉及到单表查询,那么大部分慢SQL都只需从索引上入手优化即可,通过添加合适的索引来消除全表扫描或者排序操作,执行效果,大概率能实现质的飞跃。 然而,在实际生产中,除了单表查询,更多的是多个表的联合查询,这样的查询通常是......
  • 网络安全【C10-2024.10.1】-sql注入基础-2
    1、利用宽字节注入实现“库名-表名”的注入过程,写清楚注入步骤; 宽字节概念1、如果一个字符的大小是一个字节的,称为窄字节;2、如果一个字符的大小是两个及以上字节的,称为宽字节;像GB2312、GBK、GB18030、BIG5、Shift_JIS等编码都是常见的宽字节字符集。英文默认占一个字节,中文......
  • 记录Sql Server 数据库数据库表是够新触发器时当前执行sql
    因为一个表的记录怎么也没有查到是什么原因,表的一个字段全给更新成一样了。看了所有代码也没有找到原因,这就产生了这样一个需求,我需要用一个表来记录当前这个表在更新记录时,就记录下这段SQL。最后通过百度知道dbccinputbuffer(@@spid)能返回当前执行的sql,这下就能监控到具......
  • mysqli_real_escape_string详解
    mysqli_real_escape_string是PHP中用于防止SQL注入的一种函数。它通过转义特殊字符来确保用户输入的安全性。以下是对该函数的详细介绍:函数概述用途:用于对字符串进行转义,以便安全地将其插入到SQL查询中。语法:stringmysqli_real_escape_string(mysqli$link,string......
  • winserver离线部署Python服务(vitualenv)
    python项目开发完成后,经常遇到服务器无法访问互联网,所以导致部署时无法在线安装依赖包,本篇记录了离线部署python环境的步骤。1、下载Python安装包前往Python官网下载地址下载对应版本的Python安装包,如python-3.9.12-amd64.exe。 2、在项目中创建requirements.txt,记录依赖名称......
  • MySql 9 in Docker 主从切换
    继上一篇《MySql9inDocker利用克隆插件搭建主从》我们说了主从复制后,那么我们接下来说说如何手动的进行主从切换。动手~1.原主库设置切断应用对主库的访问主库设置为只读状态setglobalread_only=ON;setglobalsuper_read_only=ON;主库执行SELECT@@gtid_exec......
  • SQL提高查询效率【in、not in、between、like】等条件讲述
    在使用SQL语句查询数据库记录时,如果要查询相同的内容,有着不同的多种方法。仍然,尽管使用多种方法可以得到相同的结果,但是,如果您使用不同的方法,在执行效益上是截然不同的。因此,我们得仔细考虑,如果要查询相同结果,该使用哪种语句,执行效益比较好。这就是SQL语句的优化。......
  • Mysql到底是个什么玩意?(初识Mysql)
    学编程和数据的小伙伴应该都听说过MySQL,仿佛全世界的编程都离不开mysql,那么mysql到底是什么,为什么大家都在用它。Mysql是什么?它一个流行的开源关系型数据库管理系统(RDBMS),它将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。Mysql被广......