row_number() 分页

本文介绍了一种使用SQL Server 2005中ROW_NUMBER()函数进行存储过程分页的方法,这种方法相较于传统分页更为简便高效。通过示例展示了如何实现特定范围的数据检索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

与之前的老式分页比起来简单方便很多但在性能方面我暂时还不知道 如果有各位知道请留言告之   共同进步

 

http://www.cnblogs.com/kaixun001/archive/2009/02/19/1393814.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值