[SQL Server]分页功能的实现

在进行一些查询的时候,如果返回的结果集很大,那么用户可能会希望对这些结果进行分页显示。也就是说,可以指定每一页显示多少条记录,以及要显示哪一页的记录。

以示例数据库AdventureWorks的Person.Contact表为例,现在希望显示该表中的人名以及其称呼。如果执行以下语句:

SELECT  Title, FirstName, Lastname
FROM  Person.Contact


那么会一次过返回199720行记录,面对这么大的结果集真是头疼……还好我们可以把结果进行分页。

要实现分页需要用到嵌套子查询,该子查询就是上面的SELECT语句,不过我们还要为其加上一列,该列用数字为每一行顺序标识编号。这里要使用ROW_NUMBER()函数:

SELECT  ROW_NUMBER()  OVER  ( ORDER   BY  ContactID)  AS  RowNum, Title, FirstName, Lastname
FROM  Person.Contact


有了顺序、唯一的编号,就可以在外部查询中进行分页,不过在这之前需要两个变量,表示每页显示多少行和页码。然后在在外部查询加一个WHERE子句和TOP子句。

完整的代码像这个样子:


DECLARE   @RowsPerPage   int @PageIndex   int

SET   @RowsPerPage   =   10
SET   @PageIndex   =   1  

SELECT  sub.Title, sub.FirstName, sub.LastName
FROM
(
SELECT  ROW_NUMBER()  OVER  ( ORDER   BY  ContactID)  AS  RowNum, Title, FirstName, Lastname
FROM  Person.Contact)  AS  sub
WHERE  sub.RowNum  BETWEEN  ( @RowsPerPage   *  ( @PageIndex   -   1 +   1 AND  ( @RowsPerPage   *   @PageIndex )


这样就实现了分页功能,改变@RowsPerPage和@PageIndex的值即可看到效果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值