SQL分页查询:offset xxx rows fetch next xxx rows only 方式

分页:offset xxx rows fetch next xxx rows only 方式

分页实现的方法又多了一种,在SQL Server 2012版本中,TSQL在Order By子句中新增 Offset-Fetch子句,用于从有序的结果集中,跳过一定数量的数据行,获取指定数量的数据行,从而达到数据行分页的目的。经过测试,从逻辑读取数量和响应的时间消耗来测评,使用Offset-Fetch实现的分页方式,比Row_Number()方式性能要高很多。

Offset-Fetch子句要求结果集是有序的,因此,只能用于order by 子句中,语法如下:

// x1:跳过的行数  x2:显示的行数
ORDER BY 字段 ASC/DESC offset x1 rows fetch next x2 rows only

例如:

// LEN(字段名)取长度  @pageIndex:第几页 @pageLine:一页显示的条数
// 假如一页显示3条数据,查询第2页需要显示的数据,则
// ((@pageIndex - 1) * @pageLine)=(2-1)*3   @pageLine=3
ORDER BY LEN(MW.WREA_CODE),MW.WREA_CODE 
offset((@pageIndex - 1) * @pageLine) rows fetch next @pageLine rows only

关键字解析:
•Offset子句:用于指定跳过(Skip)的数据行;
•Fetch子句:该子句在Offset子句之后执行,表示在跳过(Sikp)指定数量的数据行之后,返回一定数据量的数据行;
•执行顺序:Offset子句必须在Order By 子句之后执行,Fetch子句必须在Offset子句之后执行;

分页实现的思路:
1.在分页实现中,使用Order By子句,按照指定的columns对结果集进行排序;
2.使用Offset子句跳过前N页:Offset (@PageIndex-1)*@RowsPerPage rows;
3.使用Fetch子句呈现当前Page:Fetch next @RowsPerPage rows only;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值