SQL Server分页功能的实现

日期: 2009-08-02 作者:zplutor 来源:TechTarget中国 英文

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

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

  SELECT Title, FirstName, Lastname
  FROM Person.Contact

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

  要实现分页需要用到嵌套子查询,该子查询就是上面的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的值即可看到效果。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

zplutor
zplutor

相关推荐