MS SQL SERVER2005 分页存储过程

alter PROCEDURE [ dbo ] . [ PR_PageDivide ]
(
@TableName varchar ( 50 ), -- 表名
@SelectField varchar ( 200 ) = ' * ' , -- 字段名(全部字段为*)
@OrderString varchar ( 200 ), -- 排序字段(必须!支持多字段不用加order by)
@WhereString varchar ( 500 ) = N '' , -- 条件语句(不用加where)
@PageSize int = 15 , -- 每页多少条记录
@PageIndex int = 1 , -- 指定当前为第几页
@TotalPages int output -- 返回总页数
)
AS

BEGIN
if @PageIndex <= 0
set @PageIndex = 1
if @PageSize < 0
set @PageSize = 15
-- 处理开始点和结束点
Declare @TotalRecord int
Declare @StartRecord int ;
Declare @EndRecord int ;
Declare @TotalCountSql nvarchar ( 500 );
Declare @SqlString nvarchar ( 2000 );
set @StartRecord = ( @PageIndex - 1 ) * @PageSize + 1
set @EndRecord = @StartRecord + @PageSize - 1
SET @TotalCountSql = N ' select @TotalRecord = count(*) from ' + @TableName ; -- 总记录数语句
SET @SqlString = N ' (select row_number() over (order by ' + @OrderString + ' ) as rowId, ' + @SelectField + ' from ' + @TableName ; -- 查询语句
--
IF ( @WhereString ! = '' or @WhereString != null )
BEGIN
SET @TotalCountSql = @TotalCountSql + ' where ' + @WhereString ;
SET @SqlString = @SqlString + ' where ' + @WhereString ;
END
EXEC sp_executesql @totalCountSql ,N ' @TotalRecord int out ' , @TotalRecord output; -- 返回总记录数
select @TotalPages = CEILING (( @TotalRecord + 0.0 ) / @PageSize )
set @SqlString = ' select * from ' + @SqlString + ' ) as t where rowId between ' + ltrim ( str ( @StartRecord )) + ' and ' + ltrim ( str ( @EndRecord ));
Exec ( @SqlString )
END

你可能感兴趣的:(SQL Server)