zoukankan      html  css  js  c++  java
  • 分页 : 存储分页 :row_number

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go

    ALTER Procedure [dbo].[Proc_Page2005]
     @TableName varchar(50),        --表名
     @Fields varchar(5000) = '*',    --字段名(全部字段为*)
     @OrderField varchar(5000),        --排序字段(必须!支持多字段)
     @sqlWhere varchar(5000) = Null,--条件语句(不用加where)
     @pageSize int,                    --每页多少条记录
     @pageIndex int = 1 ,            --指定当前为第几页
     @TotalPage int output            --返回总页数
    as
    begin

        Begin Tran --开始事务

        Declare @sql nvarchar(4000);
        Declare @totalRecord int;   

        --计算总记录数
            
        if (@SqlWhere='' or @sqlWhere=NULL)
            set @sql = 'select @totalRecord = count(*) from ' + @TableName
        else
            set @sql = 'select @totalRecord = count(*) from ' + @TableName + ' where ' + @sqlWhere

        EXEC sp_executesql @sql,N'@totalRecord int OUTPUT',@totalRecord OUTPUT--计算总记录数       
       
        --计算总页数
        select @TotalPage=CEILING((@totalRecord+0.0)/@PageSize)

        if (@SqlWhere='' or @sqlWhere=NULL)
            set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @Fields + ' from ' + @TableName
        else
            set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @Fields + ' from ' + @TableName + ' where ' + @SqlWhere   
           
       
        --处理页数超出范围情况
        if @PageIndex<=0
            Set @pageIndex = 1
       
        if @pageIndex>@TotalPage
            Set @pageIndex = @TotalPage

         --处理开始点和结束点
        Declare @StartRecord int
        Declare @EndRecord int
       
        set @StartRecord = (@pageIndex-1)*@PageSize + 1
        set @EndRecord = @StartRecord + @pageSize - 1

        --继续合成sql语句
        set @Sql = @Sql + ') as ' + @TableName + ' where rowId between ' + Convert(varchar(50),@StartRecord) + ' and ' +  Convert(varchar(50),@EndRecord)
       
        Exec(@Sql)
        ---------------------------------------------------
        If @@Error <> 0
          Begin
            RollBack Tran
            Return -1
          End
         Else
          Begin
            Commit Tran
            Return @totalRecord ---返回记录总数
          End   
    end

        public DataSet page2005(int iPageSize, int iCurrentPage, string sColumnOrder, string sWhere, out int iRecordCount)
        {

            DataSet objDs;
            SqlParameter[] parameters ={
                     new SqlParameter("@TableName",SqlDbType.VarChar,50),
                     new SqlParameter("@Fields",SqlDbType.VarChar,5000),
                     new SqlParameter("@OrderField",SqlDbType.VarChar,5000),
                     new SqlParameter("@sqlWhere",SqlDbType.VarChar,5000),
                     new SqlParameter("@pageSize",SqlDbType.Int),
                     new SqlParameter("@pageIndex",SqlDbType.Int),
                     new SqlParameter("@totalRecord",SqlDbType.Int)};

            parameters[0].Value = "表名";
            parameters[1].Value = "*";
            parameters[2].Value = sColumnOrder;
            parameters[3].Value = sWhere;
            parameters[4].Value = iPageSize;
            parameters[5].Value = iCurrentPage;
            parameters[6].Direction = ParameterDirection.Output;
            help.RunProcedure("up_Page2005", parameters, out objDs);
            if (objDs.Tables[0].Rows.Count < 1)
            {
                objDs = null;
                iRecordCount = 0;
            }


            if (parameters[6].Value != DBNull.Value)
            {
                iRecordCount = Convert.ToInt32(parameters[6].Value);
            }
            else
            {
                iRecordCount = 0;
            }
            return objDs;
        }

  • 相关阅读:
    mysql 脚本
    一:spring boot 第一个程序启动遇到的问题及应对方案
    abp单元测试报错,出现异常解决办法 (system.directoryservices.protocols不能load该对象)
    如何实现 linq子查询
    Some times
    我的外婆
    男人之所以男人
    搭建自己网站【比如:博客】的方法
    搭建自己网站【比如:博客】的方法
    搭建自己网站【比如:博客】的方法
  • 原文地址:https://www.cnblogs.com/smallfa/p/1718602.html
Copyright © 2011-2022 走看看