语法:
select [column1] ,[column2] ... ,[columnN] from [tableName] order by [columnM] offset (pageNum -1 ) * pageSize rows fetch next pageSize rows only
备注:column1,column2 ... columnN表示实现需要查询的列,tableName是表名,columnM是需要排序的列名,pageNum是页码,pageSize是每页数据的大小,一般是先计算(pageNum-1)*pageSize的结果
offset pageIndex rows ,将前pageIndex 条记录舍去,fetch next pageSize rows only ,向后在读取pageSize 条数据。
备注统计总数量:COUNT(*) OVER()
实例:查询第1页,第2页数据,每页5条数据
/****** SSMS 的 SelectTopNRows 命令的脚本 ******/
SELECT TOP(20) * from [ECP_Core].[dbo].[C_Game_HashBlock] order by id
SELECT * FROM [ECP_Core].[dbo].[C_Game_HashBlock] order by id offset 0 rows fetch next 5 rows only
SELECT *,totalCount=COUNT(1) over() FROM [ECP_Core].[dbo].[C_Game_HashBlock] order by id offset 5 rows fetch next 5 rows only
运行结果
二:使用存储过程
Create procedure page_procedure(
DECLARE
@pageIndex INT = 10, -- 第几页
@pageSize INT = 1; -- 每页的记录数
as
begin
SELECT
name, id,
overall_count = COUNT(*) OVER()
FROM C_Game_HashBlock
ORDER BY Id
OFFSET (@pageIndex -1)*@pageSize ROWS
FETCH NEXT @pageSize ROWS ONLY;
end
)