SQL Server 2000 的分頁查詢(儲存過程)

nighthun發表於2007-03-21

1.儲存過程語句
CREATE PROCEDURE [dbo].[up_Pager]
@table varchar(2000), --表名
@col varchar(50), --按該列來進行分頁
@orderby bit, --排序,0-順序,1-倒序
@collist varchar(800),--要查詢出的欄位列表,*表示全部欄位
@pagesize int, --每頁記錄數
@page int, --指定頁
@condition varchar(800) --查詢條件
AS
DECLARE @sql nvarchar(4000),@where1 varchar(800),@where2 varchar(800),
@total_Item int,@total_Page int
IF @condition is null or rtrim(@condition)=''
BEGIN--沒有查詢條件
SET @where1=' WHERE '
SET @where2=' '
END
ELSE
BEGIN--有查詢條件
SET @where1=' WHERE () AND '--本來有條件再加上此條件
SET @where2=' WHERE () '--原本沒有條件而加上此條件
END

SET @sql='SELECT @total_Item=CEILING((COUNT(*)+0.0)'+') FROM + @where2
EXEC sp_executesql @sql,N'@total_Item int OUTPUT',@total_Item OUTPUT --計算總條數
set @total_Page = Ceiling((@total_Item+0.0)/@pagesize) --計算頁總數

IF @orderby=0
SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' +
' , '+ CAST(@total_Item AS varchar) + ' as total_Item' +
' , '+CAST(@total_Page AS varchar) + ' as total_Page' +
' FROM MAX() '+
' FROM (SELECT TOP '+CAST(@pagesize*(@page-1) AS varchar)+' '+
@col+' FROM BY ) t) ORDER BY
ELSE
SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' +
' , '+ CAST(@total_Item AS varchar) + ' as total_Item' +
' , '+CAST(@total_Page AS varchar) + ' as total_Page' +
' FROM MIN() '+
' FROM (SELECT TOP '+CAST(@pagesize*(@page-1) AS varchar)+' '+
@col+' FROM BY DESC) t) ORDER BY '+
@col+' DESC'
IF @page=1--第一頁
SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' +
' , '+ CAST(@total_Item AS varchar) + ' as total_Item' +
' , '+CAST(@total_Page AS varchar) + ' as total_Page' +
' FROM +
@where2+'ORDER BY @orderby WHEN 0 THEN '' ELSE ' DESC' END
--print @sql
EXEC(@sql)

2.在SQL中測試(教你如何使用)
EXEC up_Pager '(SELECT * FROM 表名)aa','要排序的列名',0-順序或1-倒序,'顯示列',每頁記錄數,指定頁,'條件'
EXEC up_Pager '(SELECT * FROM T_Gather_Page)aa','SaveTime',1,'*',40,3,''

[@more@]

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

相關文章