SqlServer分页方法

-- 分页第1种方法 三重循环
-- 分页查询第2页,每页有10条记录
-- 先取前20页,然后倒序,取倒序后前10条记录,这样就能得到分页所需要的数据,不过顺序反了,之后可以将再倒序回来,也可以不再排序了,直接交给前端排序。
-- 10(pageSize) 20(pageIndex*pageSize)

select * from (
    select top 10 * from (
        select top 20 * from T_Base order by ID asc   --必须按照升序排序,否则查出来的结果是错误的
    ) as T 
    order by ID desc ) temp
order by ID asc

-- 分页第2种方法 利用Max(主键)
-- 先top前11条行记录,然后利用max(id)得到最大的id,之后再重新再这个表查询前10条,不过要加上条件,where id>max(id)
-- 10 pageSize 11 ((pageIndex-1)*pageSize)

select top 10 * from T_Base where ID>
(
    select max(ID) from (select top 20 ID from T_Base order by  ID asc) T
) 
order by ID;

-- 分页三  利用row_number()
-- 直接利用row_number() over(order by id)函数计算出行数,选定相应行数返回即可,不过该关键字只有在SQL server 2005版本以上才有。
-- 10 pageSize 20 ((pageIndex-1)*pageSize)

select top 10 T.* from 
(
    select ROW_NUMBER() over(order by ID asc) as rowsnumber, * from T_Base
) T where T.rowsnumber>20
原文地址:https://www.cnblogs.com/zxh8080/p/13419699.html