asp分页偏移处理的3种方法

ASP   2025-01-07 13:32   98   0  

第1种方法:

sqlserve2008无法使用Offset、Limit进行分页,解决方法

sqlserve2008无法使用Offset、Limit进行分页,解决方法

	//按照创建的时间进行排序 ,偏移的数量 :ageNum - 1) * pageSize  查询的数量:pageSize
	common.DB.Order("created_at desc").Offset((pageNum - 1) * pageSize).Limit(pageSize).Find(&role)

使用原生的sql查询语句实现分页功能

SELECT * FROM ( select row_number() over(order by PatLastModified desc) as RowNumber,* from Patient
 )A Where RowNumber>1 AND RowNumber<=2
		// 获取分页参数
	pageNum, _ := strconv.Atoi(c.DefaultPostForm("pageNum", "1")) //params参数
	//每一页的数量
	pageSize, _ := strconv.Atoi(c.DefaultPostForm("pageSize", "2")) //params参数
	var patient []model.Patient		// 前端记录文章的:总条数
	var total int64
	common.DB.Raw("SELECT * FROM ( select row_number() over(order by PatLastModified desc) as RowNumber,* from Patient )A Where RowNumber>=? AND RowNumber<? ",((pageNum-1)*pageSize+1),((pageNum-1)*pageSize+1+pageSize)).Order("created_at desc").Find(&patient)


第2中方法:

sqlserver分页报错

错误内容:

“offset”附近有语法错误。“offset”附近有语法错误。 (102)

在 FETCH 语句中选项 NEXT 的用法无效。 (153)

错误原因:必须加排序

原sql:

SELECT * FROM 表名 t

offset 0 ROWS FETCH NEXT 10 ROWS ONLY 

修改后:

SELECT * FROM 表名 t

ORDER BY 排序字段 DESC

offset 0 ROWS FETCH NEXT 10 ROWS ONLY 


第3中方法:

SQL SERVER 2008/2012 分页查询

因为最近涉及到大数据量查询的SQL查询,在优化原本的查询的时候对比了新版本数据库和旧版的查询,旧版时不支持OFFSET 的函数的。

 SQL Server 2019 分页查询

DECLARE @page int ,@limit int --@page当前页,@limit 分页大小
set @page =1; set @limit =10;
 
SELECT  * FROM  AquariusOther.dbo.Unit_UserBasicInfo
  WHERE IsDeleted = 0 
  order by ReportDate desc 
  OFFSET (@page -1)*10 ROWS FETCH NEXT @limit ROWS ONLY


  SQL Server 2008 分页查询

DECLARE @page int ,@limit int --@page当前页,@limit 分页大小
set @page =1; set @limit =10;
 
SELECT  * FROM  AquariusOther.dbo.Unit_UserBasicInfo 
  WHERE IsDeleted = 0 
  order by ReportDate desc 
  OFFSET (@page -1)*10 ROWS FETCH NEXT @limit ROWS ONLY
 
  --此处查询了前100条来对比
  SELECT Top(100) * FROM  AquariusOther.dbo.Unit_UserBasicInfo
  WHERE IsDeleted = 0 
  order by ReportDate desc















博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。