Sql2005過程分頁

 ALTER PROCEDURE [dbo].[procPageChangeForSql2005]
(
 @fromSql varchar(4000),
 @querySql varchar(4000),
 @whereSql varchar(max),
 @orderBySql varchar(200),
 @keyField varchar(100),
 @PageSize int,                     --每頁多少條記錄
 @PageIndex int,               --指定當前爲第幾頁
 @TotalRecord int output            --返回總記錄數
)
AS
BEGIN
    declare @sql nvarchar(max)
    declare @totalCountSql nvarchar(MAX)
    declare @StartRecord int
    declare @EndRecord int declare @nPageCount int --處理開始點和結束點
    IF (@whereSql! = '' AND @whereSql IS NOT NULL)
        set @whereSql=' where '+ @whereSql
    else set @whereSql=''
    --計算總條數
    set @totalCountSql= N'select @TotalRecord = count(*) from ' + @fromSql+@whereSql --總記錄數語句
    exec sp_executesql @totalCountSql,N'@TotalRecord int out',@TotalRecord output;--返回總記錄數
    if(@PageSize>-1)
    begin     set @nPageCount =CONVERT(int, ceiling(@TotalRecord*1.0/@PageSize))
        if(@nPageCount=0 and @PageIndex != 0)
        set @PageIndex = 0
        else if (@PageIndex > (@nPageCount - 1))
        set @PageIndex = 0
        set @StartRecord = (@PageIndex)*@PageSize + 1
        set @EndRecord = @StartRecord + @PageSize - 1  --組織Sql語句 set @sql ='(select row_number() over (order by '+ @orderBySql +') as rowId,'+@querySql+' from '+ @fromSql+@whereSql;--查詢語句 set @sql ='select * from ' + @sql + ') as t where rowId between ' + ltrim(str(@StartRecord)) + ' and ' +  ltrim(str(@EndRecord));
    end
    else
    begin IF (@orderBySql! = '' AND @orderBySql IS NOT NULL) set @orderBySql=' order by '+ @orderBySql else set @orderBySql='' set @sql='select '+@querySql+' from '+ @fromSql+@whereSql+@orderBySql
    end
    Exec(@sql)
END

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章