没有使用ORM框架前,一直使用原生sql分页,突然想起来,便随手一记吧。。
首先,在mysql 中有一种常见的分页方式
-
LIMIT总是设定为pageSize; -
OFFSET计算公式为pageSize * (pageIndex - 1)。SELECT id, name, gender, score FROM students ORDER BY score DESC LIMIT 3 OFFSET 0;
但是在sql server中没有limit关键词,相对应的是TOP关键字,所以可以使用以下方法查询
方法一:在这里查询的是根据userID排序的第7,8,9条
1SELECT * 2FROM dbo.t_user 3WHERE userID IN ( SELECT TOP 3 4 userID 5 FROM t_user 6 WHERE userID NOT IN ( SELECT TOP 6 7 userID 8 FROM t_user ) )
方法二:其中的PageSize(分页的大小)和PageIndex(分页索引,初始假设为1)均为变量
1SELECT * 2FROM ( SELECT TOP PageSize 3 * 4 FROM ( SELECT TOP [PageIndex*PageSize] 5 * 6 FROM dbo.t_user 7 ORDER BY id ASC 8 ) AS b 9 ORDER BY id DESC 10 ) AS c 11ORDER BY id ASC;
方法三:其中的PageSize(分页的大小)和PageIndex(分页索引,初始假设为1)均为变量
1SELECT * 2FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY userID ASC ) AS rownumber , 3 * 4 FROM dbo.t_user 5 WHERE 1 = 1 6 ) AS t 7WHERE t.rownumber > (PageSize *(PageIndex-1)) 8 AND t.rownumber <= (PageSize *PageIndex)