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和條數(shù)即可。
CSDN上還有個(gè)存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)的代碼:
ALTER PROCEDURE news_Showlist ( @tblName varchar(255), -- 表名 @strGetFields varchar(1000), -- 需要返回的列 @fldName varchar(255), -- 排序的字段名 @PageSize int , -- 頁(yè)尺寸 @PageIndex int , -- 頁(yè)碼 @strWhere varchar(1500), -- 查詢(xún)條件(注意: 不要加where) @Sort varchar(255) --排序的方法
) AS declare @strSQL varchar(5000) -- 主語(yǔ)句 declare @strTmp varchar(110) -- 臨時(shí)變量 declare @strOrder varchar(400) -- 排序類(lèi)型
if @Sort = 'desc' begin set @strTmp = '<(select min' set @strOrder = ' order by ' + @fldName +' desc' --如果@OrderType不是,就執(zhí)行降序,這句很重要! 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 --如果是第一頁(yè)就執(zhí)行以上代碼,這樣會(huì)加快執(zhí)行速度 end else begin --以下代碼賦予了@strSQL以真正執(zhí)行的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 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
|