原创:也谈SqlServer分页

今天也来谈谈SqlServer的分页:

  1. 使用游标分页。
  2. 使用top分页。
  3. 使用ROW_NMUBER()分页(SQLServer 2005)。

对应表:

sql 代码
  1. if exists (select name from sysobjects where name='produce' and type='u')   
  2. drop table produce   
  3. go   
  4.   
  5. create table produce(   
  6.    p_id varchar(64) primary key,   
  7.   p_name varchar(50),   
  8.   p_price float,   
  9.   p_path varchar(100)   
  10. )   
  11. go   
以下是使用top分页的存储过程:
sql 代码
  1. if exists(select name from sysobjects where name='produce_proc' and type='p')   
  2. drop procedure produce_proc   
  3. go   
  4. create procedure produce_proc   
  5. @pageSize int,      --每页的记录数   
  6. @index int          --从第几条记录开始   
  7. as  
  8.   begin  
  9.   set nocount on       
  10. declare @sql nvarchar(3000)   
  11. if @index>@pageSize   
  12.      begin  
  13.   set @index = @index - @pageSize   
  14.        set @sql='select top '+cast (@pageSize as varchar(8))+' * from produce where p_id>(   
  15.           select max(p_id) from (select top '+cast (@index as varchar(8))+' p_id from produce order by p_id)    
  16.         as t)   
  17.         order by p_id'   
  18.   end  
  19. else  
  20.   begin  
  21.       set @sql = 'select top '+cast (@pageSize as varchar(8))+'* from produce order by p_id'   
  22.   end  
  23. execute sp_executesql @sql   --调用系统存储过程忧化动态执行效率    
  24.  set nocount off  
  25. end  

 

ROW_NUMBER()分页:

sql 代码
  1. SELECT * FROM (SELECT p_id,p_name,p_path,p_price,ROW_NUMBER() OVER (ORDER BY p_id) AS 'RowNumber' FROM produce) a  WHERE a.RowNumber BETWEEN 开始记录 AND 结束记录数  

改日再贴三种方式的性能测试文章

你可能感兴趣的:(oracle,sql,Hibernate,SQL Server,db2)