SQL分页

本文详细介绍了在SQL Server中实现分页的方法,包括使用临时表机制与Row_Number()函数。通过示例代码演示了如何在数据量大时,仅读取所需的数据页,并加入唯一标识列来定位结果集中的特定位置。

做网站的时候,会经常用到分页。如果数据量大的话,肯定要一次从数据库中读取一页的数据,而不是一次全读出来。


分页的思路大概如下,你先把所有需要的数据Select出来,然后每次去若干条。怎么才能做到每次取若干条呢,首先,你需要把所有的列都加上一个唯一的标识位,以表示出来某一列在结果集中的索引。其次,你需要告诉存储过程,你需要从第几条数据开始取,取多少条。第二个问题好解决,就是给存储过程两个参数,下面主要说说第一个问题,怎样才能加上一列字段,唯一标识出来该列在结果集中的索引呢?
 
下面是我实现的两种方式。
 

第一,适用于所有SQL Server版本,临时表机制。
 
这是我列出来的一些SQL,我知道大家都不太喜欢看别人的代码,因为不知道字段啥意思,也没见到表结构,等等。
我只是象征性的列出来,你忍受一下,看看思路。
creat proc [dbo].[GetPagedData]
@userID varchar(50),
@startIndex int ,
@recordsCount int 
as 
select  lic.goodsID , bag.bagName goodsName , bag.intro ,
lic.isEnable , purchaseMan , rowIndex = identity(int , 1 ,1)          --加上标识列
into #t                                                                                                --插入到临时表中
from goods_licences lic
left join goods_bag bag 
on bag.bagID= lic.goodsID
where lic.licenseeman=@userID
select top(@recordsCount) * from #t where rowIndex >= @startIndex                                                                  
drop table #t                                                                      --从临时表中读数据,完了之后,把临时表删除
 
 
第二种方式,使用 Row_Number() 函数,但要求SQL Server 的版本在2005及其跟高版本。
 
select * from
(
select row_number() OVER( ORDER BY r_user.userID ) as row_index  --加上标识咧
  ,userID
  from r_user
T where row_index between 10 and 20
 

转载于:https://www.cnblogs.com/zdkai/archive/2012/09/17/2688602.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值