Sql2005 版通用分页存储过程

  1. CREATE PROCEDURE [dbo].[GetPagingList](
  2. @Table nvarchar(1000),          --表名
  3. @Field nvarchar(1000) = '*',        --读取字段
  4. @Where  nvarchar(500) = NULL,       --Where条件
  5. @GroupBy nvarchar(500) = NULL,      --分组
  6. @OrderBy nvarchar(500)= NULL,       --排序字段
  7. @PrimaryKeyField nvarchar(50),      --主键必需 
  8. @PageNumber int = 1,            --开始页码
  9. @PageSize int = 10,             --页大小
  10. @IsCount bit = 0            --是否返回记录总数
  11. )
  12. AS
  13. BEGIN
  14.     ------------------------------------------------------------------------------------------------
  15.     DECLARE @strWhere nvarchar(500)                     --Where 条件
  16.     IF @Where IS NOT NULL AND @Where != ''              --Where 条件
  17.     BEGIN
  18.         SET @strWhere = ' WHERE ' + @Where + ' '
  19.     END
  20.     ELSE
  21.     BEGIN
  22.         SET @strWhere = ''
  23.     END
  24.     ----------------------------------------------------------------------------------------------------
  25.     DECLARE @strGroupBy nvarchar(500)                   --GroupBy 条件
  26.     IF @GroupBy IS NOT NULL AND @GroupBy != ''          --GroupBy 条件
  27.     BEGIN
  28.         SET @strGroupBy = ' GROUP BY ' + @GroupBy + ' '
  29.     END
  30.     ELSE
  31.     BEGIN
  32.         SET @strGroupBy = ''
  33.     END
  34.     ----------------------------------------------------------------------------------------------------
  35.     DECLARE @strOrderBy nvarchar(500)                   --OrderBy 条件
  36.     IF @OrderBy IS NULL OR @OrderBy = ''                --OrderBy 条件
  37.     BEGIN
  38.         SET @strOrderBy = ' ORDER BY ' + @PrimaryKeyField + ' DESC'
  39.     END
  40.     ELSE
  41.     BEGIN
  42.         SET @strOrderBy = ' ORDER BY ' + @OrderBy
  43.     END
  44.     ----------------------------------------------------------------------------------------------------
  45.     DECLARE @strSql nvarchar(max)   --Sql 语句
  46.     --计算总行数
  47.     IF @IsCount = 1
  48.     BEGIN
  49.         SET @strSql= 'SELECT  Count (*) AS RecordCount FROM ' + @Table + @strWhere + @strGroupBy
  50.         EXEC sp_executesql @strSql
  51.         RETURN 
  52.     END 
  53.     ----------------------------------------------------------------------------------------------------
  54.     IF @PageNumber < 1                                  --第一页提高性能
  55.     BEGIN   
  56.         SET @PageNumber = 1
  57.     END
  58.     IF @PageNumber = 1                          
  59.     BEGIN
  60.         SET @strSql = 'SELECT TOP ' + str(@PageSize) +  ' ' + @Field + ' FROM ' + @Table + 
  61.                        @strWhere + @strGroupBy + @strOrderBy
  62.         EXEC sp_executesql @strSql
  63.         RETURN
  64.     END
  65.     ----------------------------------------------------------------------------------------------------
  66.     --根据 SqlServer 2005 帮助得到下面的语句   
  67.     DECLARE @STARTID nvarchar(50)
  68.     DECLARE @ENDID nvarchar(50)
  69.     SET @STARTID = convert(nvarchar(50),(@PageNumber - 1) * @PageSize + 1)
  70.     SET @ENDID = convert(nvarchar(50),@PageNumber * @PageSize)
  71.     SET @strSql = 'WITH MYTABLE AS (SELECT ROW_NUMBER() OVER (' + @strOrderBy + ')
  72.                    AS RowNumber,' + @Field + ' FROM '+ @Table +  @strWhere + @strGroupBy + '
  73.                    SELECT * FROM MYTABLE 
  74.                    WHERE RowNumber BETWEEN ' + @STARTID + ' AND ' + @ENDID
  75.     EXEC sp_executesql @strSql
  76.     --------------------------------------------------------------------------------------------------
  77. END
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值