sql server 带输入输出参数的分页存储过程(效率最高)
2015-04-27 15:56
225 查看
create procedure proc_page_withtopmax
(
@pageIndex int,--页索引
@pageSize int,--每页显示数
@pageCount int output,--总页数,输出参数
@totalCount int output--总条数
)
as
begin
set 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 id'
execute(@sql)
declare @sqlRecordCount nvarchar(1000) --得到总记录条数的语句
set @sqlRecordCount=N'select @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 = @recordCount
set nocount off;
end
--数据库中执行该存储过程
declare @pageCount int, @totalCount int
exec proc_page_withtopmax 2,95955,@pageCount output,@totalCount output
select '总页数:'+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 = pageSize;
cmd.Parameters[1].Value = pageIndex;
cmd.Parameters[2].Value = 0;
cmd.Parameters[3].Value = 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;
}
}
(
@pageIndex int,--页索引
@pageSize int,--每页显示数
@pageCount int output,--总页数,输出参数
@totalCount int output--总条数
)
as
begin
set 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 id'
execute(@sql)
declare @sqlRecordCount nvarchar(1000) --得到总记录条数的语句
set @sqlRecordCount=N'select @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 = @recordCount
set nocount off;
end
--数据库中执行该存储过程
declare @pageCount int, @totalCount int
exec proc_page_withtopmax 2,95955,@pageCount output,@totalCount output
select '总页数:'+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 = pageSize;
cmd.Parameters[1].Value = pageIndex;
cmd.Parameters[2].Value = 0;
cmd.Parameters[3].Value = 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 带输入输出参数的分页存储过程(效率最高)
- sql server 带输入输出参数的分页存储过程(效率最高)
- sql server 带输入输出参数的分页存储过程(效率最高)
- oracle带输入输出参数存储过程(包括sql分页功能)
- Oracle带输入输出参数存储过程(包括sql分页功能)
- asp.net 操作带输入输出参数的分页存储过程(四)
- asp.net 操作带输入输出参数的分页存储过程(三)
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- oracle使用带有输入和输出参数的存储过程
- 存储过程输出参数:C#中调用输入输出参数的存储过程
- mybatis 调用mysql存储过程 带输出输入参数
- Sql Server中存储过程中输入和输出参数(简单实例 一看就懂)
- C# 调用带输入输出参数的存储过程
- SQL Server 第三堂课,学习数据库函数。跟C#语言异曲同工,同样是由输入参数,输出参数,函数体,返回值四要素组成,不同的是语法和写法。掌握知识的关键在与学好C#语言的函数
- ASP.NET中调用存储过程带(输入/输出)参数和返回值的一些常用的例子
- 'VB编程 编写一个竞赛评分的函数过程。评委打分为参数(数组参数),选手得分为函数值。记分规则为:去掉一个最高分,去掉一个最低分,然后求平均。调用该函数,由键盘输入5个评委的打分(存放在数组中),输出
- 使用带输入输出参数的存储过程
- Sql Server中存储过程中输入和输出参数(简单实例,一看就懂)
- C#中调用输入输出参数的存储过程
- 带输入输出参数的存储过程