当前位置:数据库 > SQLServer >>

sqlserver中的翻页

sqlserver中没有类似oralce中的伪列。所以不能用这个属性来进行分页。

这是我最近搞的一个关于sqlserver的分页,不知道对你有没有帮助:

我们知道,sqlserver中,top关键字是用来取前n条记录的。如果想得到查询结果集中的前20条数据,则sql语句如下:
select top 20 *   from x_user ;
方法1:
对于一般的表,id都是基于一种规则顺序往下走的。一般情况下,是自动增一的。这里也就只能讨论这种情况,对于个别的情况,如果以后项目遇到了,我会再继续玩玩得。不过对于目前绝大多数的id自增的情况是适用的。所以,我们可以钻一个空子:
select top 20 *   from x_user order by uid ;

这样,就可以根据uid来排序进行取数据的操作。这是第一页的情况。由于id是自增的,所以第二页的第一条记录的id肯定比上一页的大。并且都是顺序排列的。因此,第二页的sql可以如下表示:
select top 20 *   from x_user where uid > 上一页最后的id order by uid ;

第三页,第四页...... 以此类推。只要找到上一页的最后一个id就行了。

哈哈。相当简单的吧。这是下一页的操作。至于上一页,用法是一样的。不过这里需要注意的是:上一页的条数的那个id需要减去2倍的每页显示条数。这是为什么呢?

举例说明:

1,2,3,4,5    第一页  最后的id = 5
6,7,8,9,10   第二页  最后的id = 10
11,12,13,14 ,15  第三页  最后的id = 15

我们从第一页翻到第二页的sql是:select top 20 *   from x_user where uid > 5 order by uid ;记住,这个id是5!!
假如我们从第三页想返回第二页。第三页的最后一个id是15。所以15-5=10 。正好是每页显示条数的2倍。
换句话说,从第三页返回到第二页,这个sql语句中的id其实记录的是第一页的最后一个id。所以需要减去2倍的每页显示条数。

方法2 :
用between ... and ... 关键字。
select top 20 *   from x_user where uid between 10 and 20 order by uid;
这样直接就能得到啦。省事吧?不过这2种都仅限于id是那种规则自增的方式。如果你非要搞个随机数,日期什么的。恐怕就不行了。不过谁还用那玩意啊?对于绝大多数的项目都好使就行啊。哈哈

好了。就这么,继续忙项目了。:)

 

<
补充:数据库,Mssql
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,