sql语句怎么实现分页?SQL技巧之ROWNUMBER
sql语句怎么实现分页?SQL技巧之ROWNUMBERSELECT * FROM dbo.zy_detail_charge通过ROW_NUMBER()函数分页来实现,可自定义每页记录数和页数。参数:<partition_by_clause>:将 FROM 子句生成的结果集划入应用了 ROW_NUMBER 函数的分区。 <order_by_clause>:确定将 ROW_NUMBER 值分配给分区中的行的顺序。例如:我有一个费用明细表zy_detail_charge中有290万条记录,如果需要全部读取出来需要1分多钟。
1.ROW_NUMBER()函数介绍ROW_NUMBER()函数将针对SELECT语句返回的每一行,从1开始编号,赋予其连续的编号。在查询时应用了一个排序标准后,只有通过编号才能够保证其顺序是一致的,当使用ROW_NUMBER函数时,也需要专门一列用于预先排序以便于进行编号。
2.ROW_NUMBER()函数语法规则说明:返回结果集分区内行的序列号,每个分区的第一行从1开始。
语法:ROW_NUMBER () OVER ([ <partition_by_clause> ] <order_by_clause>) 。
备注:ORDER BY子句可确定在特定分区中为自行分配唯一ROW_NUMBER 的顺序。
参数:<partition_by_clause>:将 FROM 子句生成的结果集划入应用了 ROW_NUMBER 函数的分区。
<order_by_clause>:确定将 ROW_NUMBER 值分配给分区中的行的顺序。
3.ROW_NUMBER()函数实现分页案例例如:我有一个费用明细表zy_detail_charge中有290万条记录,如果需要全部读取出来需要1分多钟。
SELECT * FROM dbo.zy_detail_charge
通过ROW_NUMBER()函数分页来实现,可自定义每页记录数和页数。
DECLARE @pagesize INT --每页记录数
DECLARE @pagenum INT ---第几页
SET @pagesize=1000
SET @pagenum=1
SELECT t.*
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY patient_id) AS findex
*
FROM zy_detail_charge
) AS t
WHERE findex
BETWEEN @pagesize * (@pagenum - 1) 1
AND @pagenum * @pagesize