存储过程参数输入输出

?? ?? ???

随笔- 137  文章- 0  评论- 6

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

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

}

时间: 2024-08-26 01:50:08

存储过程参数输入输出的相关文章

调用MySql 分页存储过程带有输入输出参数

1 Create PROCEDURE getuser 2 ( 3 IN pageIndex INT, 4 IN pageSize INT, 5 OUT count INT 6 ) 7 8 BEGIN 9 declare pindex int DEFAULT (pageIndex-1)*pageSize; 10 11 select * from lc_user order by id LImit pindex,pageSize; 12 13 SELECT COUNT(id) INTO count

oracle 存储过程参数介绍 in ,out , in out 以及 执行(二)

存储过程参数 1.IN DEFAULT (默认)2.OUT3.IN OUT 可修改 形参和实参-- 形参 1 CREATE PROCEDURE raise_sal(ID NUMBER ,sal NUMBER) 2 IS 3 BEGIN ... 4 END raise_sal; -- 实参 1 emp_id := 100; 2 raise_sal(emp_id,2000); -- in参数类型演示  薪水涨幅 percent 1 CREATE OR REPLACE PROCEDURE raise_

MySQL 存储过程参数用法 in, out, inout

MySQL 存储过程参数有三种类型:in.out.inout.它们各有什么作用和特点呢? 一.MySQL 存储过程参数(in) MySQL 存储过程 “in” 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数,但对 in 类型参数的修改,对调用者(caller)来说是不可见的(not visible). drop procedure if exists pr_param_in; create procedure pr_param_in ( in id int

sql server 2008存储过程参数

--使用存储过程参数 --包括输入参数和输出参数,以及参数的默认值 --指定参数名称和数据类型 --输入参数允许用户将数据值传递到存储过程或者函数 --输出参数允许存储过程将数据值或者游标变量传递给用户 --存储过程的参数在创建时应该在create procedure 和as关键值之间定义,每个参数都有指定参数名和数据类型,参数名必须以 [email protected]开头为前缀,各个参数定义之间用逗号隔开 [email protected]_name data_type[=default][

?Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数

Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数 7.4.4  为外部参数设置默认值 开发者也可以对外部参数设置默认值.这时,调用的时候,也可以省略参数传递本文选自Swift1.2语言快速入门v2.0. [示例7-11]以下的代码就为外部参数toString.withJoiner设置了默认的参数"Swift"和"---".代码如下: import Foundation func join(string s1: String, toString

一次存储过程参数嗅探定位流程总结

昨天一开发同事反馈一个存储过程很慢,但是重编译后,存储过程就很快了.了解基本情况后,初步判断是参数嗅探问题.那么如何诊断定位.分析问题呢?下面简单介绍一下这次参数嗅探问题定位的流程过程. 首先查看该存储过程的执行计划相关信息: 如下截图所示,此存储过程是2018-09-12 9:03:01缓存的,最后一次执行是2018-09-14 08:58,而且自上次缓存后,执行了24875次.从这里我们基本判断该存储过程一直在重用缓存的执行计划,而且没有产生重编译现象. SELECT  d.object_i

[译]DbContext API中使用SqlQuery和ExecuteSqlCommand获取存储过程的输入输出参数

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流

oracle——存储过程参数

oracle 存储过程类型: 1.in:输入类型,即由应用程序将数据传入oracle存储过程中:这种参数在存储过程中是只读参数,在存储过程中无法对该类型的参数进行修改: 2.out:输出参数,是在存储过程中对该值进行赋值,在程序中获取值. 3.in out:输入输出参数,兼具以上两种特性,但可读可写. 验证输入参数: 由于默认参数是输入类型的,在上图中,对BAcount参数赋值,报错. 解决办法: CREATE OR REPLACE PACKAGE body BAWQ_PROC_JGZX IS

5.7.17强制注释函数和存储过程参数

SHOW VARIABLES LIKE 'log_bin_trust_function_creators'; log_bin_trust_function_creators:默认值为0,在执行导出的函数和存储过程时,/!*  */ 被认为已注释,执行时会报错! 所以可以开启参数, SET GLOBAL log_bin_trust_function_creators=1: 这样就可以执行备份的函数和存储过程了.