第1种方法:
//按照创建的时间进行排序 ,偏移的数量 :ageNum - 1) * pageSize 查询的数量:pageSize common.DB.Order("created_at desc").Offset((pageNum - 1) * pageSize).Limit(pageSize).Find(&role)
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中方法:
错误内容:
“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查询,在优化原本的查询的时候对比了新版本数据库和旧版的查询,旧版时不支持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