--saik友情提供 saikoyz@hotmail.com
/*
功能描述:對指定表中滿足條件的記錄按指定列進行分頁查詢
作 者:saiko
版 本:1.10
最后修改:2005-04-13
調用例子:
spoSplitPages'任何條件的SQL語句',2,10 -- 第2頁,每頁10行
EXEC spoSplitPages '你的SQL語句','排序欄位',0 ,30, 1 -- 0: 最後一頁 30:每頁記錄數 1:降冪
*/
CREATE procedure spoSplitPages
@SqlQuery nvarchar(4000), --查詢字符串
@OrderFieldName varchar(30), --按該列為關鍵字來進行排序分頁
@CurrentPage int, --第N頁 (如果是 0 則讀取 最后 一頁的記錄 )
@PageSize int, --每頁行數
@OrderType int --排序, 0:順序, 1: 其它數字: 不進行排序 (只有此處的數字不為 0 為 1 的時候,外程序傳入的 OrderFieldName 才可以為空!)
as
DECLARE @sql nvarchar(4000), @tPageCount int
IF @OrderType=0
SET @sql= @SqlQuery + ' ORDER BY '+@OrderFieldName
IF @OrderType=1
SET @sql =@SqlQuery + ' ORDER BY '+@OrderFieldName + ' DESC '
else
SET @sql =@SqlQuery
BEGIN
set nocount on
declare @P1 int,--P1是游標的id
@rowcount int
--print @sql
exec sp_cursoropen @P1 output,@sql,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
SET @tPageCount = ceiling(1.0*@rowcount/@PageSize)
if @CurrentPage = 0
set @CurrentPage = @tPageCount -- @PageIndex = 0 表示在調用時,是首次查詢,先讀取 最后 一頁的記錄
set @CurrentPage=(@CurrentPage-1)*@PageSize+1
exec sp_cursorfetch @P1,16,@CurrentPage,@PageSize
exec sp_cursorclose @P1
select @tPageCount as PagesCount ,@rowcount as RowsCount,@CurrentPage as CurrentPage
set nocount off
END
GO