分页SQL语句

分页SQL语句

——独立观察员 2018.01.21

做网站开发的都知道,显示列表项过多时会采取分页。本文主要讨论分页中的SQL语句,仅供参考。

以下是C#中的参数化的SQL语句片段,展示了分页时的情况:

 

可以看出,该SQL语句中使用了嵌套查询。内层查询中使用了开窗函数over(),关于开窗函数,可参考文章《sql开窗函数over()用法》,总之,开窗函数能很方便让我们把聚集函数的值放到查询项中。话归正题,上面的SQL语句使用了count(*) over()来查询出总行数,使用row_number() over()来设置行号,其它都是常规查询。

然后是外层查询,使用top()来限定最终查询几条,参数@num传递的就是每页的条数。使用where num>@index来限定外层查询的起始位置,@index也就是当前页第一条的上一条的位置,或者说是当前页的上一页的最后一条的位置,num是内层查询出的行号。

以上就是本次介绍的分页SQL语句,再配合Ajax查询、JS翻页插件,就能实现列表页的翻页了。

接下来我们再说说详情页的SQL语句:

 

该语句首先声明了一个表变量@TempTable用于存放查询的中间结果(听说表变量会有性能损失,可考虑用公用表(with as),不过公用表限制比较大,试过了,不合适)。然后将带行号的查询结果插入表变量中。第三部分是声明了一个变量@num用于存放当前要查询记录的行号。最后就是复用表变量,分别查询出当前记录数据、上一条相关信息、下一条相关信息。参数@id就是待查询记录的ID。另外,此处的”上一条”指在列表页中排列在更上面的一条,所以查询时为行号减一。

全剧终!谢谢观赏!

 

打印本文

2 回复 to 分页SQL语句

  1. essaypinglun说道:

    很好的博客,赞赞。

回复