row_number()存储过程分页

本文详细介绍使用SQL Server 2005中的ROW_NUMBER()函数实现高效分页查询的方法。通过存储过程,可以灵活地获取指定页数的数据,同时计算总页数,适用于大量数据的快速分页展示。

在sql server 2005 的新方法ROW_NUMBER做一个查询
select row_number() over (order by ProductID) as Row,Name from Product
可以看到返回结果中每条记录都有一个唯一的表示其序列号的标志。
例如我们在分页中要获取的6到第10条记录就可以采用下面的方法
select Row,Name from
(select ROW_NUMBER() over(order by ProductID) as Row,Name from Product)
as ProductsWithRowNumbers
where Row >= 6 and Row <=10
返回相关的记录。

那我们就利用row_number() 做一个存储过程分页

carate proc [dbo].[page_tbale1]
(

@pageNo int, --当前页数值,最小为1,表示第一页
@pageSize int, --每页显示条数
@PageCount int out,--获取总页数

)
as
set nocount on --使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息。--获取总页数

declare @itemscount int
select @PageCount =CEILING( (count(ID)+0.0)/@PageSize)

from Product

order by ProductID

if(@pageNo <> 1)

begin

set @itemscount=(@pageNo-1)*@pageSize+1

select Row,Name from
(select ROW_NUMBER() over(order by ProductID) as Row,Name from Product)
as ProductsWithRowNumbers
where Row >= @itemscount and Row <= @pageNo * @pageSize

end

else

begin

select Row,Name from
(select ROW_NUMBER() over(order by ProductID) as Row,Name from Product)
as ProductsWithRowNumbers
where Row >= 1 and Row <= @pageSize

end

set rowcount 0

posted on 2012-08-16 02:21  思考命运 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/thinkfate/archive/2012/08/16/2641096.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值