SQL Server 通用分页方案

第一种方案: 
两次TOP分页,原型如下:   

SELECT   *   FROM   ( 
SELECT   TOP  每页大小   *   FROM   ( 

SELECT   TOP   每页大小*当前页码   *   FROM   

表   WHERE   条件   ORDER   BY   字段A   ASC 

)   AS   TEMPTABLE1   ORDER   BY   字段A   DESC 

)   AS   TEMPTABLE2   ORDER   BY   字段A   ASC 

弊病:1   强制排序   否则不能分页,虽然目前基本上查询表都要排序 

2.   排序字段不能有空值即null,否则分页结果不符实际情况 

3.   多次order   by   速度会快吗,有待我进一步大数据量测试 

 

 

第二种方案:基于NOT IN   ,原型如下 

SELECT TOP   每页大小   * 
FROM   表
WHERE   ( 
Id   NOT   IN 
(SELECT TOP  每 页大小*页数   Id   FROM   表   ORDER BY Id) 

ORDER BY Id 

弊病:1   强制排序 
2   排序列必须是唯一列,否则分页情况不符实际 
3.   使用not   in,速度慢, 

 

第三种方案:   基于MAX   或者   MIN ,原型如下: 

SELECT TOP   每页大小   * 
FROM   表 
WHERE   ( 
Id   >   (   
SELECT    ISNULL(MAX(Id),0)  FROM   (   SELECT TOP   每页大小*页数   Id   FROM   表 
ORDER BY Id   )   as   t 

)   
ORDER BY Id

弊病:1   强制排序 
2   排序列必须是唯一列,否则分页情况不符实际

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值