-- 分页第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