sql分页ROW_NUMBER(),存储过程

--标准用法:

select * from
(select ROW_NUMBER() OVER (order by id desc )AS RowNumber,* from tUsers) as temp
where RowNumber between 1 and 10

 

--简单实例

with List as (
select ROW_NUMBER() OVER (order by ID desc )AS RowNumber,* from TgJiLu where 1=1
)
select * from List where RowNumber between 1 and 10

【Rownumber存储过程分页】

create proc [dbo].[spSqlPageByRownumber]
@tbName varchar(255),        --表名
@tbFields varchar(1000),      --返回字段
@PageSize int,                --页尺寸
@PageIndex int,                --页码
@strWhere varchar(1000),    --查询条件
@StrOrder varchar(255),  --排序条件
@Total int output            --返回总记录数
as
declare @strSql varchar(5000)    --主语句
declare @strSqlCount nvarchar(500)--查询记录总数主语句
 
--------------总记录数---------------
if @strWhere !=''
begin
set @strSqlCount='Select @TotalCout=count(*) from  ' + @tbName + ' where '+ @strWhere
end
else
begin
set @strSqlCount='Select @TotalCout=count(*) from  ' + @tbName
end
--------------分页------------
if @PageIndex <= 0
begin
  set @PageIndex = 1
end
 
set @strSql='Select * from (Select  row_number() over('+@strOrder+') rowId,'+ @tbFields
+' from ' + @tbName + ' where 1=1 ' + @strWhere+' ) tb where tb.rowId >'+str((@PageIndex-1)*@PageSize)
+' and tb.rowId <= ' +str(@PageIndex*@PageSize)
 
exec sp_executesql @strSqlCount,N'@TotalCout int output',@Total output
exec(@strSql)
View Code
--exec [dbo].[spSqlPageByRownumber]'pagetest','*',50,20,'','order by id asc',@count output

【top存储过程分页】

create proc [dbo].[spSqlPageByMaxTop]
@tbName varchar(255),        --表名
@tbFields varchar(1000),      --返回字段
@PageSize int,                --页尺寸
@PageIndex int,                --页码
@strWhere varchar(1000),    --查询条件
@StrOrder varchar(255),  --排序条件
@Total int output            --返回总记录数
as
declare @strSql varchar(5000)    --主语句
declare @strSqlCount nvarchar(500)--查询记录总数主语句
 
--------------总记录数---------------
if @strWhere !=''
begin
set @strSqlCount='Select @TotalCout=count(*) from  ' + @tbName + ' where '+ @strWhere
end
else
begin
set @strSqlCount='Select @TotalCout=count(*) from  ' + @tbName
end
--------------分页------------
if @PageIndex <= 0
begin
  set @PageIndex = 1
end
 
set @strSql='select top '+str(@PageSize)+' * from ' + @tbName + '
where id>(select max(id) from (select top '+str((@PageIndex-1)*@PageSize)+' id from ' + @tbName + ''+@strOrder+')a)
'+@strOrder+''
 
exec sp_executesql @strSqlCount,N'@TotalCout int output',@Total output
exec(@strSql)
View Code
exec [dbo].[spSqlPageByMaxTop]'pagetest','*',50,20,'','order by id asc',@count output

 

 

--实例

exec sp_executesql N'
WITH Cte as(
SELECT MoBanID,count(1) allcount
, count(distinct KaHao)peoplecount
,count(CASE WHEN TgJiLu.FangShi=2 THEN 1 end)yxcount
,count(CASE WHEN TgJiLu.FangShi=3 THEN 1 end)wxcount
FROM TgJiLu
where TgJiLu.FangShi IN(2,3) AND TgJiLu.ZhuangTai=1 and RuKou!=3 and MoBanID>0
--时间筛选
and TgJiLu.TianJiaShiJian BETWEEN ''2016-06-07'' and ''2016-06-21''
GROUP BY MoBanID
),
CtePaged AS(
SELECT tb_diqu,allcount,peoplecount,TgAnLi.LeiXing,MingCheng,ID,yxcount,wxcount
,ROW_NUMBER() OVER (order by allcount desc )AS Row
FROM TgAnLi
left JOIN Cte on MoBanID=TgAnLi.ID
WHERE Zhuangtai=2
--检索
)
SELECT * FROM CtePaged
where Row BETWEEN (@PageIndex-1)*@PageSize + 1 AND @PageIndex* @PageSize
',N'@PageIndex int,@PageSize int',@PageIndex=1,@PageSize=12

转载于:https://www.cnblogs.com/guangang/articles/5600283.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值