首页 > 代码库 > sql server 带输入输出参数的分页存储过程(效率最高)

sql server 带输入输出参数的分页存储过程(效率最高)

create procedure proc_page_withtopmax( @pageIndex int,--页索引 @pageSize int,--每页显示数 @pageCount int output,--总页数,输出参数  @totalCount int output--总条数)asbeginset nocount on;declare @sql nvarchar(1000)set @sql=select top 10 *  from tb_testtable where (id> (select max(id) from (select top +str((@pageIndex-1)*@pageSize)+ id from tb_testtable order by id) as temp)) order by idexecute(@sql)declare @sqlRecordCount nvarchar(1000) --得到总记录条数的语句set @sqlRecordCount=Nselect @recordCount=count(*) from tb_testtable declare @recordCount int --保存总记录条数的变量exec sp_executesql @sqlRecordCount,N@recordCount int output,@recordCount output if( @recordCount % @pageSize = 0) --如果总记录条数可以被页大小整除 set @pageCount = @recordCount / @pageSize --总页数就等于总记录条数除以页大小 else --如果总记录条数不能被页大小整除 set @pageCount = @recordCount / @pageSize + 1 --总页数就等于总记录条数除以页大小加1 set @totalCount = @recordCountset nocount off;end--数据库中执行该存储过程declare @pageCount int, @totalCount intexec proc_page_withtopmax 2,95955,@pageCount output,@totalCount outputselect 总页数:+str(@pageCount)select 总条数:+str(@totalCount)

C# 代码调用该带输入输出参数的分页存储过程

  public static DataSet GetRecordByPage( int pageSize, int pageIndex, out int pageCount, out int totalCount)        {            DataSet ds = new DataSet();            try            {                using (SqlConnection conn = new SqlConnection(@"server=;database=data_test;uid=; pwd=;"))                {                    SqlCommand cmd = new SqlCommand();                    cmd.Connection = conn;                    cmd.Parameters.Add(new SqlParameter("@pageSize", SqlDbType.Int));                    cmd.Parameters.Add(new SqlParameter("@pageIndex", SqlDbType.Int));                    SqlParameter param = new SqlParameter("@totalCount", SqlDbType.Int);                    param.Direction = ParameterDirection.Output;                    cmd.Parameters.Add(param);                    SqlParameter param1 = new SqlParameter("@pageCount", SqlDbType.Int);                    param1.Direction = ParameterDirection.Output;                    cmd.Parameters.Add(param1);                    cmd.Parameters[0].Value =http://www.mamicode.com/ pageSize;                    cmd.Parameters[1].Value =http://www.mamicode.com/ pageIndex;                    cmd.Parameters[2].Value = http://www.mamicode.com/0;                    cmd.Parameters[3].Value = http://www.mamicode.com/0;                    cmd.CommandType = CommandType.StoredProcedure;                    cmd.CommandText = "proc_page_withtopmax";                    cmd.CommandTimeout = 180;                    SqlDataAdapter adapter = new SqlDataAdapter();                    adapter.SelectCommand = cmd;                    DataSet source = new DataSet();                    adapter.Fill(ds);                                     object o = cmd.Parameters["@totalCount"].Value;                    totalCount = (o == null || o == DBNull.Value) ? 0 : System.Convert.ToInt32(o);                    object b = cmd.Parameters["@pageCount"].Value;                    pageCount = (b == null || o == DBNull.Value) ? 0 : System.Convert.ToInt32(b);                }            }            catch (SqlException e)            {                throw e;            }            return ds;        }    }

 

sql server 带输入输出参数的分页存储过程(效率最高)