博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql server 带输入输出参数的分页存储过程(效率最高)
阅读量:5101 次
发布时间:2019-06-13

本文共 2538 字,大约阅读时间需要 8 分钟。

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;
}

}

转载于:https://www.cnblogs.com/Look_Sun/p/4460429.html

你可能感兴趣的文章
组合总和3 leetcode 216
查看>>
leetcode(128)最长连续序列
查看>>
xshell工具
查看>>
自然数之和(leetcode 167)
查看>>
数组中第三大的数 leetcode 414
查看>>
html样式
查看>>
插入、删除和随机查询时间复杂度都为O(1) leetcode 381
查看>>
实战Netty集群
查看>>
多线程 Threading Multiprocessing(Python)
查看>>
多线程
查看>>
Hadoop-MapReduce
查看>>
Hadoop-HDFS
查看>>
CodeChef - METEORAK Meteor
查看>>
andorid月总结
查看>>
iis部署错误:HTTP 错误 500.21 - Internal Server Error
查看>>
Linux系统知识汇总
查看>>
IdentityServer4【Topic】之定义资源
查看>>
【SQLServer】将Job运行结果发送电子邮件通知用户
查看>>
js 易错点
查看>>
一封程序员的苦逼辞职信
查看>>