SqlServer中使用row_number() over实现通用的分页存储过程

--通用的分页存储过程

create procedure sp_pager

(

@Sql nvarchar(4000), --要分页的sql语句

@CurrentPageNo int,  --当前页面索引

@PageSize int,           --每一页要显示的页数

@TotalNum int output --数据的总条数 (输出参数)

)

as  

  declare @sqlcmd varchar(8000)  

  --查询数据  

  set @sqlcmd = 'select * from (' + @Sql + ') a  where RowIndex between ' +  convert(nvarchar,(@CurrentPageNo-1) * @PageSize + 1) + ' and ' + convert(varchar,@CurrentPageNo * @PageSize)  

  exec(@sqlcmd)  

  print (@sqlCmd)

  --求记录总数

      create table tempTable(num int)  

  insert into tempTable  exec('select count(*) from (' + @Sql + ') a')  

  select @TotalNum=(select * from tempTable)  

  drop table tempTable

go

--=========================================测试存储过程

declare @Sql varchar(5000)

declare @CurrentPageNo int

declare @PageSize int

declare @TotalNum int

set @CurrentPageNo = 2

set @PageSize = 4

set @Sql=' select products.PID,products.PName,products.MarketPrice,productDispose.ShopPrice,row_number() over (order by products.PID) as RowIndex from ProductsDisposeInfo productDispose inner join ProductsInfo products on productDispose.PID=products.PID'

exec sp_pager @Sql,@CurrentPageNo,@PageSize,@TotalNum output

print @TotalNum

转载于:https://www.cnblogs.com/daisy-thq/p/3446537.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值