经常接触到的mysql,拼接SQL分页语句直接在sql尾部加上limit x,x,既不污染原SQL,又够方便整洁。
最近做多数据源动态查询,需要支持多种数据库,分页问题随之而来,像mysql、oracle这些拼串方式不再赘述。
高版本的sqlserver(2012)其实也支持如mysql中limit这种分页方式。
offset /fetch nex:
select * from student
order by sno
offset ((@pageIndex-1)*@pageSize) rows
fetch next @pageSize rows only;
如果确认sqlserver高于2012,可以使用这种方式进行分页。
如果低于这个版本,或兼容老版本,考虑利用row_number
row_number:
考虑兼容性、通用性,在踏过坑后,下面sql替换方案为最终版本。
将sql替换下列 原sql的位置 ,pageIndex :当前页的位置 pageSize:一页几条数据。
SELECT
FROM
SELECT
row number() over ( ORDER BY tempcolumn) temprownumber, *FROM
(
SELECT top "+ ((pageIndex - 1) * pageSize + pageSize) +" tempcolumn = 0,* FROM (
"+ 原sql的位置 +"
) t
) tt
) ttt
WHERE
temprownumber > "+ (pageIndex - 1) * pageSize