SQL Server2005 分页通用存储过程

 

CREATE PROC up_TablePager
(
    
@TableName VARCHAR(200), --表名
    @PKName  VARCHAR(100),   --主建名称
    @PageIndex INT = 1,      --页码 (第n页)
    @PageSize  INT = 10,     --每页显示记录数
    @OrderBy   VARCHAR(200= ''--排序
    @Where     VARCHAR(200= ''  --条件
)
AS
DECLARE @sql NVARCHAR(4000)
DECLARE @PageBegin INT
DECLARE @PageEnd INT
DECLARE @PageCount INT
DECLARE @RowCount INT

IF(@PageSize < 1)
BEGIN
    
SET @PageSize = 10
END

IF(@PageIndex < 1)
BEGIN
    
SET @PageIndex = 1
END

IF(@Where <> '')
BEGIN
    
SET @Where = 'where '+@Where
END

SET @sql = N'select @RowCount=COUNT(*) from [' + @TableName + '' + @Where

EXEC sp_executesql @sql,N'@RowCount INT OUTPUT',@RowCount OUTPUT   

SET @PageCount = CEILING(CAST(@RowCount AS NUMERIC)/CAST(@PageSize AS NUMERIC))

SET @PageBegin = (@PageIndex-1* @PageSize
SET @PageEnd = @PageBegin + @PageSize

IF(@OrderBy = '')
BEGIN
    
SET @OrderBy = @PKName
END

SET @sql =
'select * from
(
    select *,ROW_NUMBER() OVER (order by 
' + @OrderBy + ') as pos
    from [
' + @TableName + '] {$where}
) as T
where T.pos>
' + CONVERT(VARCHAR(10),@PageBegin+ ' and T.pos<=' + CONVERT(VARCHAR(10),@PageEnd)

SET @sql = REPLACE(@sql,'{$where}',@Where)

EXEC (@sql)
posted @ 2007-06-15 13:37  三月三  阅读(186)  评论(0)    收藏  举报