SQLSERVER一个分页存储过程

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值