zoukankan      html  css  js  c++  java
  • 分页存储过程

    今天遇到要分页处理批量数据,要自己编写存储过程,在网上看上如下作者写得很好,故借鉴,结合自身要求并改之,

    引用地址:http://51cndo.blog.51cto.com/491222/102320

    内容如下:

    参数:分页大小,第几页,需要得到的字段 ,需要查询的表 , 查询条件,排序的字段名,排序的类型,主键名称

    /*通用分页存储过程*/
    USE HotelManagementSystem
    GO
    IF EXISTS(SELECT * FROM sys.objects WHERE NAME='cndoup_GetPageOfRecords')
      DROP PROCEDURE cndoup_GetPageOfRecords
    GO
    --创建存储过程
    CREATE PROCEDURE cndoup_GetPageOfRecords
      @pageSize int = 20,                                                --分页大小
      @currentPage int ,                                                 --第几页
      @columns varchar(1000) = '*',                            --需要得到的字段
      @tableName varchar(100),                                     --需要查询的表    
      @condition varchar(1000) = '',                         --查询条件, 不用加where关键字
      @ascColumn varchar(100) = '',                            --排序的字段名 (即 order by column asc/desc)
      @bitOrderType bit = 0,                                         --排序的类型 (0为升序,1为降序)
      @pkColumn varchar(50) = ''                                 --主键名称

    AS
    BEGIN                                                                                    --存储过程开始
      DECLARE @strTemp varchar(300)
      DECLARE @strSql varchar(5000)                            --该存储过程最后执行的语句
      DECLARE @strOrderType varchar(1000)                --排序类型语句 (order by column asc或者order by column desc)

      BEGIN
        IF @bitOrderType = 1                --降序
          BEGIN
            SET @strOrderType = ' ORDER BY '+@ascColumn+' DESC'
            SET @strTemp = '<(SELECT min'
          END
        ELSE                  --升序
          BEGIN
            SET @strOrderType = ' ORDER BY '+@ascColumn+' ASC'
            SET @strTemp = '>(SELECT max'
          END

        IF @currentPage = 1            --第一页
          BEGIN
            IF @condition != ''
              SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@columns+' FROM '+@tableName+
                ' WHERE '+@condition+@strOrderType
            ELSE
              SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@columns+' FROM '+@tableName+@strOrderType
          END

        ELSE                  -- 其他页
          BEGIN
            IF @condition !=''
              SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@columns+' FROM '+@tableName+
              ' WHERE '+@condition+' AND '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currentPage-1)*@pageSize)+
              ' '+@pkColumn+' FROM '+@tableName'where'+@condition+@strOrderType+') AS TabTemp)'+@strOrderType
            ELSE
              SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@columns+' FROM '+@tableName+
              ' WHERE '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currentPage-1)*@pageSize)+' '+@pkColumn+
              ' FROM '+@tableName+@strOrderType+') AS TabTemp)'+@strOrderType
          END

      END
      EXEC (@strSql)
    END  

      --存储过程结束

     

    结合自身实际,借鉴上位作者编码的存储过程如下:

    ******************************************************************
    CREATE PROCEDURE [dbo].[UP_GetRecordByPage]
        @tblName      varchar(255),       -- 表名
        @fldName      varchar(255),       -- 主键字段名
        @PageSize     int = 10,           -- 页尺寸
        @PageIndex    int = 1,            -- 页码
        @IsReCount    bit = 0,            -- 返回记录总数, 非 0 值则返回
        @OrderType    bit = 0,            -- 设置排序类型, 非 0 值则降序
        @strWhere     varchar(1000) = ''  -- 查询条件 (注意: 不要加 where)
    AS
    declare @strSQL   varchar(6000)       -- 主语句
    declare @strTmp   varchar(300)        -- 临时变量
    declare @strOrder varchar(400)        -- 排序类型
    if @OrderType != 0
    begin
        set @strTmp = '<(select min'
        set @strOrder = ' order by [' + @fldName +'] desc'
    end
    else
    begin
        set @strTmp = '>(select max'
        set @strOrder = ' order by [' + @fldName +'] asc'
    end
    set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
        + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
        + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
        + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
        + @strOrder
    if @strWhere != ''
        set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
            + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
            + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
            + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
            + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
    if @PageIndex = 1
    begin
        set @strTmp =''
        if @strWhere != ''
            set @strTmp = ' where ' + @strWhere
        set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
            + @tblName + ']' + @strTmp + ' ' + @strOrder
    end
    if @IsReCount != 0
    begin
             set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
         if @strWhere != ''
             set @strSQL = 'select count(*) as Total from [' + @tblName + ']'+' where ' + @strWhere
    end
    exec (@strSQL)

    调用:

         public DataSet GetList(int PageSize, int PageIndex, string strWhere)
            {
                SqlParameter[] parameters = {
         new SqlParameter("@tblName", SqlDbType.VarChar, 255),
         new SqlParameter("@fldName", SqlDbType.VarChar, 255),
         new SqlParameter("@PageSize", SqlDbType.Int),
         new SqlParameter("@PageIndex", SqlDbType.Int),
         new SqlParameter("@IsReCount", SqlDbType.Bit),
         new SqlParameter("@OrderType", SqlDbType.Bit),
         new SqlParameter("@strWhere", SqlDbType.VarChar,1000),
         };
                parameters[0].Value = "Product";
                parameters[1].Value = "ProductID";
                parameters[2].Value = PageSize;
                parameters[3].Value = PageIndex;
                parameters[4].Value = 0;
                parameters[5].Value = 0;
                parameters[6].Value = strWhere;
                return DbHelperSQL.RunProcedure("UP_GetRecordByPage", parameters, "ds");
            }


  • 相关阅读:
    windows下安装pip教程
    python安装扩展”unable to find vcvarsall.bat“的解决办法
    minggw 安装
    Python-- easy_install 的安装
    python 处理中文遇到的编码问题总结 以及 字符str的编码如何判断
    python中的三个读read(),readline()和readlines()
    同时读取两个文件进行while循环
    python 类实例化,修改属性值
    Python if-elif-else
    python 元组
  • 原文地址:https://www.cnblogs.com/vihone/p/1633402.html
Copyright © 2011-2022 走看看