CREATE   PROCEDURE PrSqlPager
(
        
@TableName  nvarchar(100),    -- 表名
        @StrWhere nvarchar(500),    -- Where 子句
        @IdentityKey  nvarchar(100),   -- 标识列
        @PageNum   int,   -- 页号
        @PageSize   int,   -- 页大小
        @ErrInfo varchar(100)  OUTPUT,  -- 出错信息
        @TotalRecordCount int OUTPUT,   -- 总记录数
        @PageCount int OUTPUT   -- 总页数
)
AS
DECLARE @sql NVARCHAR(1000)
DECLARE @paramDefine NVARCHAR(1000)
/******************** 数据表中总记录数 ***********************/
SET @sql = 'SELECT @TotalRecordCount = COUNT(*) FROM ' + @TableName + ' WHERE 1=1'
IF @StrWhere IS NOT NULL AND @StrWhere <> ''
 
SET @sql = @sql + ' AND ' + @StrWhere
SET @paramDefine = '@TotalRecordCount INT OUTPUT'
EXEC SP_EXECUTESQL @sql,@paramDefine,@TotalRecordCount OUTPUT
/*************************************************************/
/*********************** 验证页大小 **************************/
IF @PageSize < 0
 
SET @PageSize = 0
IF @PageSize > @TotalRecordCount
 
SET @PageNum = @TotalRecordCount
/*************************************************************/
/******************** 根据页大小计算总页数 ***********************/
IF @TotalRecordCount % @PageSize = 0
 
SET @PageCount = @TotalRecordCount / @PageSize
ELSE
 
SET @PageCount = @TotalRecordCount / @PageSize + 1
/*************************************************************/
/*********************** 验证页号 ***************************/
IF @PageNum < 1
 
SET @PageNum = 1
IF @PageNum > @PageCount
 
SET @PageNum = @PageCount
/*************************************************************/
/******************** 实现分页查询 ***********************/
DECLARE @foreRecordCount INT
SET @foreRecordCount = (@PageNum - 1* @PageSize + 1
SET @sql = 'SELECT TOP ' + CAST(@PageSize as varchar
 
+ ' * FROM ' + @TableName
 
+ ' WHERE ' + @IdentityKey + ' >= '
 
+ ' ( SELECT MAX( ' + @IdentityKey + ' ) FROM ( SELECT TOP ' 
 
+ CAST(@foreRecordCount as varchar)
 
+ @IdentityKey + ' FROM ' + @TableName
 
+ ' ORDER BY ' + @IdentityKey + ' ) AS TempTable ) '
 
+ ' ORDER BY ' + @IdentityKey
IF @StrWhere IS NOT NULL AND @StrWhere <> ''
 
SET @sql = @sql + ' AND ' + @StrWhere
SET @paramDefine = N'@PageSize INT,@foreRecordCount INT'
EXEC SP_EXECUTESQL @sql,@paramDefine,@PageSize,@foreRecordCount
/*************************************************************/
GO
http://blog.csdn.net/haojialin/archive/2006/01/15/580250.aspx
http://blog.csdn.net/hushan518/archive/2005/08/26/465954.aspx
http://blog.csdn.net/lingfeng0626/archive/2005/10/08/497098.aspx
posted on 2007-02-02 09:02  mbskys  阅读(169)  评论(0)    收藏  举报