Fork me on GitHub
用SQL 2005的ROW_NUMBER() 实现分页功能
DECLARE @pagenum AS INT, @pagesize AS INT 
SET @pagenum = 2 
SET @pagesize = 3 
SELECT * 
FROM (SELECT ROW_NUMBER() OVER(ORDER BY newsid DESC) AS rownum,  
        newsid, topic, ntime, hits 
      FROM news) AS D 
WHERE rownum BETWEEN (@pagenum-1)*@pagesize+1 AND @pagenum*@pagesize 
ORDER BY newsid DESC 


aspx里面只需给SQL传入pageid和条数即可。 

CSDN上还有个存储过程实现分页的代码: 

ALTER PROCEDURE news_Showlist 
( 
@tblName   varchar(255),       -- 表名 
@strGetFields varchar(1000),  -- 需要返回的列 
@fldName varchar(255),      -- 排序的字段名 
@PageSize   int ,          -- 页尺寸 


@PageIndex  int ,           -- 页码 
@strWhere  varchar(1500),  -- 查询条件(注意: 不要加where) 
@Sort varchar(255)      --排序的方法 

) 
AS 
declare @strSQL   varchar(5000)       -- 主语句 
declare @strTmp   varchar(110)        -- 临时变量 
declare @strOrder varchar(400)        -- 排序类型 

  

if @Sort = ’desc’ 
begin 
set @strTmp = ’<(select min’ 
set @strOrder = ’ order by ’ + @fldName +’ desc’ 
--如果@OrderType不是,就执行降序,这句很重要! 
end 
else 
begin 
set @strTmp = ’>(select max’ 
set @strOrder = ’ order by ’ + @fldName +’ asc’ 

end 
  
if @PageIndex = 1 
begin 
if @strWhere != ’’    
  begin 
set @strSQL = ’select top ’ + str(@PageSize) +’ ’+@strGetFields+ ’  from ’ + @tblName + ’ where ’ + @strWhere + ’ ’ + @strOrder 
  end 
else 
  begin 
set @strSQL = ’select top ’ + str(@PageSize) +’ ’+@strGetFields+ ’  from ’+ @tblName + ’ ’+ @strOrder 
  end 
--如果是第一页就执行以上代码,这样会加快执行速度 
end 
else 
begin 
--以下代码赋予了@strSQL以真正执行的SQL代码 
set @strSQL = ’select top ’ + str(@PageSize) +’ ’+@strGetFields+ ’  from ’ 
+ @tblName + ’ where ’ + @fldName + ’’ + @strTmp + ’(’+ @fldName + ’) from (select top ’ + str((@PageIndex-1)*@PageSize) + ’ ’+ @fldName + ’ from ’ + @tblName + ’’ + @strOrder + ’) as tblTmp)’+ @strOrder 
数据大全,www.sql163.com

  
if @strWhere != ’’ 
set @strSQL = ’select top ’ + str(@PageSize) +’ ’+@strGetFields+ ’  from ’ 
+ @tblName + ’ where ’ + @fldName + ’’ + @strTmp + ’(’ 
+ @fldName + ’) from (select top ’ + str((@PageIndex-1)*@PageSize) + ’ ’ 
+ @fldName + ’ from ’ + @tblName + ’ where ’ + @strWhere + ’ ’ 
+ @strOrder + ’) as tblTmp) and ’ + @strWhere + ’ ’ + @strOrder 
end 
exec (@strSQL) 
RETURN 
posted on 2010-04-29 15:29  HackerVirus  阅读(276)  评论(0编辑  收藏  举报