【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能

iDotNetSpace發表於2008-06-02

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上還有個儲存過程實現分頁的程式碼:

【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能ALTER PROCEDURE news_Showlist
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能(
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
@tblName   varchar(255),       -- 表名
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
@strGetFields varchar(1000),  -- 需要返回的列
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
@fldName varchar(255),      -- 排序的欄位名
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
@PageSize   int ,          -- 頁尺寸
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
@PageIndex  int ,           -- 頁碼
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
@strWhere  varchar(1500),  -- 查詢條件(注意: 不要加where)
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
@Sort varchar(255)      --排序的方法
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能

【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能)
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
AS
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
declare @strSQL   varchar(5000)       -- 主語句
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
declare @strTmp   varchar(110)        -- 臨時變數
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
declare @strOrder varchar(400)        -- 排序型別
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能

【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
if @Sort = 'desc'
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
begin
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
set @strTmp = ''
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
set @strOrder = ' order by ' + @fldName +' desc'
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
--如果@OrderType不是,就執行降序,這句很重要!
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
end
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
else
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
begin
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
set @strTmp = '>(select max'
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
set @strOrder = ' order by ' + @fldName +' asc'
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
end
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能 
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
if @PageIndex = 1
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
begin
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
if @strWhere != ''   
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能  
begin
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
set @strSQL = 'select top ' + str(@PageSize+' '+@strGetFields+ '  from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能  
end
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
else
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能  
begin
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
set @strSQL = 'select top ' + str(@PageSize+' '+@strGetFields+ '  from '+ @tblName + ' '+ @strOrder
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能  
end
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
--如果是第一頁就執行以上程式碼,這樣會加快執行速度
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
end
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
else
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
begin
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
--以下程式碼賦予了@strSQL以真正執行的SQL程式碼
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
set @strSQL = 'select top ' + str(@PageSize+' '+@strGetFields+ '  from '
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
+ @tblName + ' where ' + @fldName + '' + @strTmp + '('+ @fldName + ') from (select top ' + str((@PageIndex-1)*@PageSize+ ' '+ @fldName + ' from ' + @tblName + '' + @strOrder + ') as tblTmp)'+ @strOrder
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能 
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
if @strWhere != ''
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
set @strSQL = 'select top ' + str(@PageSize+' '+@strGetFields+ '  from '
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
+ @tblName + ' where ' + @fldName + '' + @strTmp + '('
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
+ @fldName + ') from (select top ' + str((@PageIndex-1)*@PageSize+ ' '
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
+ @fldName + ' from ' + @tblName + ' where ' + @strWhere + ' '
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
end
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
exec (@strSQL)
【清清月兒】用SQL 2005的ROW_NUMBER() 實現分頁功能
RETURN

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-329649/,如需轉載,請註明出處,否則將追究法律責任。

相關文章