Dict.CN 在线词典, 英语学习, 在线翻译 ------------- MyGitee 朱秋贵内科诊所 My腾云code

分页 : 存储分页 :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;
    }

posted @ 2010-04-23 14:27  cn2024  阅读(245)  评论(0编辑  收藏  举报