码迷,mamicode.com
首页 > 数据库 > 详细

Sqlserver 分页查询

时间:2019-10-28 14:25:28      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:smart   很多   report   put   and   fan   room   red   开始   

     说到分页查询,相信很多人都知道,可能对于写后台的人来说,只需要拿到前台的每页条数:PageSize  ,当前页码:PageIndex 在传值给数:RecordCount   给数据库处理就行了。(当然直接在后台拼接sql字符串也可以)数据库是怎末处理的呢?我们来看看这个分页的存储过程:

  USE [SmartNetGO

/****** Object:  StoredProcedure [dbo].[ReportManage_Finance_CostRoom_GetList]    Script Date: 2019/10/28 星期一 11:50:31 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[存储过程名]
--模拟省市区的查询条件
@ProvinceID int, @CityID int, @AreaID int,@pageSize int,//每页的条数 @nowPage int,//当前页数 @RecordCount int output //返回的记录条数 As
//我们先搭一个最大的框架
SELECT k.* FROM ( select ROW_NUMBER() OVER (ORDER BY Id desc ) as RowNumber,
结果项1,
结果项2,
结果项3.。。。。。
from 表 A where (省id=@ProvinceID or @ProvinceID=0) and (市id=@CityID or @CityID=0) and (县区id=@AreaID or @AreaID=0)
)k where RowNumber BETWEEN @PageSize*(@nowPage-1)+1 and @PageSize*@nowPage 

   

select ROW_NUMBER() OVER (ORDER BY Id desc ) as RowNumber 是什么意思呢? 简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY 【列名】DESC) 是先把【列名】降序排列,再为降序以后的每条【列名】记录返回一个降序序号,序号从1开始,依次往下排。
排名函数 "ROW_NUMBER" 必须有 ORDER BY 子句。

至于where后面是什么意思,你可以看我在SqlServer多条件查询技巧(https://www.cnblogs.com/zpy1993-09/p/11677406.html)中做过详细解释了。

技术图片

 

   总记录数就比较好搞了。

set @RecordCount=( select Count(*)from 表 A where   (省id=@ProvinceID or @ProvinceID=0)  and (市id=@CityID or @CityID=0) and (县区id=@AreaID or @AreaID=0))

 这样后台在调用存储过程,返回的结果就是分页后的结果了。是不是很简单!

Sqlserver 分页查询

标签:smart   很多   report   put   and   fan   room   red   开始   

原文地址:https://www.cnblogs.com/zpy1993-09/p/11751597.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!