SQL分页语句及简单的SQL分页存储过程

假分页:从数据库中选择所有的记录后再进行分页


真分页:只从数据库中选择当前页的记录

   

 

Sql代码
  1. select top 每页显示的记录数 * from topic where id not in  
  2.  (select top (当前的页数-1)×每页显示的记录数 id from topic order by id desc)   
  3.  order by id desc  
select top 每页显示的记录数 * from topic where id not in
 (select top (当前的页数-1)×每页显示的记录数 id from topic order by id desc)
 order by id desc

  

    需要注意的是在access中不能是top 0,所以如果数据只有一页的话就得做判断了。。

 

    SQL2005中的分页代码:

 

   

Sql代码
  1. with temptbl as (   
  2.   SELECT ROW_NUMBER() OVER (ORDER BY id desc)AS Row,    
  3.   ...   
  4. )   
  5. SELECT * FROM temptbl where Row between @startIndex and @endIndex  
with temptbl as (
  SELECT ROW_NUMBER() OVER (ORDER BY id desc)AS Row, 
  ...
)
SELECT * FROM temptbl where Row between @startIndex and @endIndex

 

分页存储过程:

Sql代码
  1. create procedure proc_pager   
  2. (   @startIndex int,--开始记录数   
  3.     @endIndex int   --结束记录数   
  4. )   
  5. as  
  6. begin  
  7. declare @indextable table(id int identity(1,1),nid int)   
  8. insert into @indextable(nid) select orderid from orders order by orderid desc  
  9. select *    
  10. from orders o   
  11. inner join @indextable i   
  12. on o.orderid=i.nid   
  13. where i.id between @startIndex and @endIndex   
  14. order by i.id   
  15. end  
create procedure proc_pager
(	@startIndex int,--开始记录数
	@endIndex int	--结束记录数
)
as
begin
declare @indextable table(id int identity(1,1),nid int)
insert into @indextable(nid) select orderid from orders order by orderid desc
select * 
from orders o
inner join @indextable i
on o.orderid=i.nid
where i.id between @startIndex and @endIndex
order by i.id
end

 

 

   

Sql代码
  1. create procedure proc_pager1   
  2. (   @pageIndex int-- 要选择第X页的数据   
  3.     @pageSize int -- 每页显示记录数   
  4. )   
  5. AS  
  6. BEGIN  
  7.     declare @sqlStr varchar(500)   
  8.     set @sqlStr='select top '+convert(varchar(10),@pageSize)+   
  9.     ' * from orders where orderid not in(select top '+   
  10.     convert(varchar(20),(@pageIndex-1)*@pageSize)+   
  11.     ' orderid from orders) order by orderid'  
  12.     exec (@sqlStr)   
  13. END  
create procedure proc_pager1
(	@pageIndex int, -- 要选择第X页的数据
	@pageSize int -- 每页显示记录数
)
AS
BEGIN
	declare @sqlStr varchar(500)
	set @sqlStr='select top '+convert(varchar(10),@pageSize)+
	' * from orders where orderid not in(select top '+
	convert(varchar(20),(@pageIndex-1)*@pageSize)+
	' orderid from orders) order by orderid'
	exec (@sqlStr)
END

 

   下面这个仅适用sql2005

 

  

Sql代码
  1. create procedure proc_pager2   
  2. (   @startIndex int,--开始记录数   
  3.     @endIndex int   --结束记录数   
  4. )   
  5. as  
  6. begin  
  7. WITH temptbl AS    
  8. (SELECT ROW_NUMBER() OVER (ORDER BY orderid DESCAS Row, *FROM orders)   
  9.  SELECT * FROM temptbl   
  10. where row between @startIndex and @endIndex   
  11. order by row   
  12. end  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值