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)
(
@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)