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

来源:互联网 发布:网站数据分析流程 编辑:程序博客网 时间:2024/05/09 21:18
假分页:从数据库中选择所有的记录后再进行分页


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

   

 

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  

  

    需要注意的是在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  

 

分页存储过程:

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  

 

 

   

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  

 

   下面这个仅适用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  
原创粉丝点击