SQLServer存储过程返回值总结.
SqlServer存储过程调用存储过程接收输出参数返回值

DECLARE @count INT EXECUTE GetCustomers @count OUTPUT PRINT @count
2,带返回值
创建存储过பைடு நூலகம்:
ALTER PROCEDURE [dbo].[GetCustomers] AS
SELECT [CustomerID] ,[CompanyName] ,[ContactName] ,[ContactTitle] ,[Address] ,[City] ,[Region] ,[PostalCode] ,[Country] ,[Phone] ,[Fax] FROM [Northwind].[dbo].[Customers] RETURN @@rowcount
创建存储过程:
ALTER PROCEDURE [dbo].[GetCustomers] (@rowcount INT OUTPUT) AS
SELECT [CustomerID] ,[CompanyName] ,[ContactName] ,[ContactTitle] ,[Address] ,[City] ,[Region] ,[PostalCode] ,[Country] ,[Phone] ,[Fax] FROM [Northwind].[dbo].[Customers] SET @rowcount=@@rowcount
接收返回值:
DECLARE @count INT EXECUTE @count=GetCustomers PRINT @count
以上所述是小编给大家介绍的Sql Server 存储过程调用存储过程接收输出参数返回值,希望对大家有所帮助,如果大家有任何 疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
sqlserver获取存储过程返回值

sqlserver获取存储过程返回值sqlserver获取存储过程返回值1.OUPUT参数返回值[sql]view plaincopyprint?1. CREATE PROCEDURE [dbo].[nb_order_insert](2. @o_buyerid int ,3. @o_id bigint OUTPUT4. )5. AS6. BEGIN7. SET NOCOUNT ON;8. BEGIN9. INSERT INTO [Order](o_buyerid )10. VALUES (@o_buyerid )11. SET @o_id = @@IDENTITY12. END13. END存储过程中获得方法:DECLARE@o_buyerid intDECLARE@o_id bigintEXEC[nb_order_insert]@o_buyerid,@o_id output2.RETURN过程返回值CREATE PROCEDURE[dbo].[nb_order_insert]( @o_buyerid int ,@o_id bigint OUTPUT)AS BEGINSET NOCOUNT ON;IF(EXISTS(SELECT*FROM[Shop]WHERE[s_id]=@o_sho pid))BEGININSERT INTO[Order](o_buyerid ) VALUES (@o_buyerid )SET@o_id=@@IDENTITYRETURN1—插入成功返回1 ENDELSERETURN0—插入失败返回0END存储过程中的获取方法DECLARE@o_buyerid int DECLARE@o_id bigintDECLARE@result bitEXEC@result=[nb_order_insert]@o_buyerid ,o_id bigint 3.SELECT 数据集返回值CREATE PROCEDURE[dbo].[nb_order_select]( @o_id int)ASBEGINSET NOCOUNT ON;SELECT o_id,o_buyerid FROM[Order] WHERE o_id =@o_idGO存储过程中的获取方法(1)、使用临时表的方法CREATE TABLE[dbo].[Temp]([o_id][bigint]IDENTITY(1,1) NOT FOR REPLICATION NOT NU LL,[o_buyerid][int]NOT NULL)INSERT[Temp]EXEC[nb_order_select]@o_id–这时Temp就是EXEC执行SELECT 后的结果集SELECT*FROM[Temp]DROP[Temp]—删除临时表(2)、速度不怎么样.(不推荐)SELECT*fromopenrowset(’provider_name','Trusted_Connecti on=yes’,'exec nb_order_select’)1.获取Return返回值//存储过程//Create PROCEDURE MYSQL// @a int,// @b int//AS// return @a + @b//GOSqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Local SqlServer"].ToString());conn.Open();SqlCommand MyCommand = new SqlCommand("MYSQL", conn);/doc/6513034340.html,mandType = CommandType.StoredProcedure;MyCommand.Parameters.Add(new SqlParameter("@a", SqlDbType.Int));MyCommand.Parameters["@a"].Value = 10;MyCommand.Parameters.Add(new SqlParameter("@b", SqlDbType.Int));MyCommand.Parameters["@b"].Value = 20;MyCommand.Parameters.Add(new SqlParameter("@return", SqlDbType.Int));MyCommand.Parameters["@return"].Direction = ParameterDirection.ReturnValue;MyCommand.ExecuteNonQuery();Response.Write(MyCommand.Parameters["@return"].Value. ToString());2.获取Output输出参数值//存储过程//Create PROCEDURE MYSQL// @a int,// @b int,// @c int output//AS// Set @c = @a + @b//GOSqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Local SqlServer"].ToString()); conn.Open();SqlCommand MyCommand = new SqlCommand("MYSQL", conn);/doc/6513034340.html,mandType = CommandType.StoredProcedure;MyCommand.Parameters.Add(new SqlParameter("@a", SqlDbType.Int));MyCommand.Parameters["@a"].Value = 20;MyCommand.Parameters.Add(new SqlParameter("@b", SqlDbType.Int));MyCommand.Parameters["@b"].Value = 20;MyCommand.Parameters.Add(new SqlParameter("@c", SqlDbType.Int));MyCommand.Parameters["@c"].Direction = ParameterDirection.Output;MyCommand.ExecuteNonQuery();Response.Write(MyCommand.Parameters["@c"].Value.T oStri ng());C#接收存储过程返回值:public static int User_Add(User us){int iRet;SqlConnection conn = new SqlConnection(Conn_Str);SqlCommand cmd = new SqlCommand("User_Add", conn);/doc/6513034340.html,mandType = CommandType.StoredProcedure;cmd.Parameters.AddWithValue("@UName", us.UName);cmd.Parameters.AddWithValue("@UPass", us.UPass);cmd.Parameters.AddWithValue("@PassQuestion",us.PassQuestion);cmd.Parameters.AddWithValue("@PassKey", us.PassKey);cmd.Parameters.AddWithValue("@Email", us.Email);cmd.Parameters.AddWithValue("@RName", us.RName);cmd.Parameters.AddWithValue("@Area", us.Area);cmd.Parameters.AddWithValue("@Address", us.Address);cmd.Parameters.AddWithValue("@ZipCodes", us.ZipCodes);cmd.Parameters.AddWithValue("@Phone", us.Phone);cmd.Parameters.AddWithValue("@QQ", us.QQ);cmd.Parameters.Add("@RETURN_VALUE", "").Direction = ParameterDirection.ReturnValue;try{conn.Open();cmd.ExecuteNonQuery();iRet = (int)cmd.Parameters["@RETURN_VALUE"].Value;}catch (SqlException ex){throw ex;}finally{conn.Close();}return iRet;}C#接收存储过程输出参数:public static decimal Cart_UserAmount(int UID){decimal iRet;SqlConnection conn = new SqlConnection(Conn_Str);SqlCommand cmd = new SqlCommand("Cart_UserAmount", conn);/doc/6513034340.html,mandType = CommandType.StoredProcedure;cmd.Parameters.AddWithValue("@UID", UID);cmd.Parameters.Add("@Amount",SqlDbType.Decimal).Direction=ParameterDirection.Output;try{conn.Open();cmd.ExecuteNonQuery();iRet = (decimal)cmd.Parameters["@Amount"].Value;}catch (SqlException ex){throw ex;}finally{conn.Close(); }return iRet; }。
mybatis sqlserver存储过程返回参数

MyBatis与SQL Server存储过程:返回参数的处理在许多应用程序中,我们经常需要从数据库中执行复杂的操作,而存储过程是实现这一目标的有效方式。
MyBatis是一个优秀的持久层框架,它允许你直接使用SQL,同时提供了许多便利的功能,如映射、参数传递等。
当我们将MyBatis与SQL Server的存储过程结合使用时,处理返回参数是一个关键环节。
在SQL Server中,存储过程可以返回一个或多个输出参数,也可以返回一个结果集。
在MyBatis中,你可以通过映射文件或注解来定义如何处理这些返回值。
1. 定义存储过程首先,让我们定义一个简单的存储过程。
这个存储过程将接受一个输入参数,并返回一个输出参数和结果集。
2. 在MyBatis中处理返回参数在MyBatis中,你可以通过映射文件或注解来指定如何处理存储过程的返回值。
使用映射文件在映射文件中,你可以定义一个<select>元素,并使用resultType属性指定返回值的类型。
对于输出参数,你可以使用<resultMap>元素来定义结果集和输出参数的映射关系。
其中#{employeeName, mode=OUT, jdbcType=VARCHAR}指定了输出参数employeeName的类型和模式。
使用注解你也可以使用注解来定义映射关系。
对于输出参数,你可以使用@Result注解来指定输出参数的类型和映射关系。
在这个例子中,#{employeeName, jdbcType=VARCHAR, mode=OUT}指定了输出参数employeeName的类型和模式。
@Result(column="employeeName", property="employeeName")指定了输出参数和Java对象的映射关系。
无论你选择使用映射文件还是注解,都要确保你的Java对象与存储过程的返回值类型匹配。
SQLSERVER存储过程大总结

SQLSERVER存储过程使用说明书引言首先介绍一下什么是存储过程:存储过程就是将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来,并且这样的语句是放在数据库中的,还可以根据条件执行不同SQL语句,那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。
请大家先看一个小例子:create proc query_bookasselect * from bookgo--调用存储过程exec query_book请大家来了解一下存储过程的语法。
Create PROC [ EDURE ] procedure_name [ ; number ][ { @parameter data_type }[ VARYING ] [ = default ] [ OUTPUT ]] [ ,...n ][ WITH{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ][ FOR REPLICATION ]AS sql_statement [ ...n ]一、参数简介1、procedure_name新存储过程的名称。
过程名必须符合标识符规则,且对于数据库及其所有者必须唯一。
要创建局部临时过程,可以在 procedure_name 前面加一个编号符 (#procedure_name),要创建全局临时过程,可以在 procedure_name 前面加两个编号符 (##procedure_name)。
完整的名称(包括 # 或 ##)不能超过 128 个字符。
指定过程所有者的名称是可选的。
2、;number是可选的整数,用来对同名的过程分组,以便用一条 Drop PROCEDURE 语句即可将同组的过程一起除去。
例如,名为 orders 的应用程序使用的过程可以命名为 orderproc;1、orderproc;2 等。
SqlServer调用存储过程返回结果集

USE[zhuhaioa7-4]GO/****** Object: StoredProcedure [dbo].[proc_records] Script Date: 12/26/2014 20:31:09 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER procedure[dbo].[proc_records]asDECLARE@map_table table(r_key varchar(100),r_value varchar(50))DECLARE@type_id varchar(40)DECLARE@type_name varchar(50)DECLARE@project_id varchar(40)DECLARE@project_name varchar(50)DECLARE@payTypeMoney numeric(16, 2)DECLARE@sumPayTypeMoney numeric(16, 2)BEGINset@payTypeMoney= 0set@sumPayTypeMoney= 0--查询项目列表DECLARE project_cursor CURSOR for select ep_id,ep_name from AB_engineeringPhase where account_id='2' open project_cursorfetch next from project_cursor into@project_id,@project_namewhile@@FETCH_STATUS= 0begin--查询项目支付类别DECLARE projectType_cursor CURSOR for select id,name from T_DataItem where typeId='payType'order by sort ascopen projectType_cursorfetch next from projectType_cursor into@type_id,@type_namewhile@@FETCH_STATUS= 0begin--业务逻辑处理处理内层游标--获取一个项目某一项支付类型的数据--查询一个项目某一支付类别金额select@payTypeMoney=sum(checkProjectPayMoney)from JiLiangZhiFu where projectId=@project_id and payType=@type_id group by payType--一个项目某一支付类别金额存入insert into@map_table values(@project_id+','+@type_id,@payTypeMoney)--一个项目累计支付类别金额set@sumPayTypeMoney=@sumPayTypeMoney+@payTypeMoney--一个项目某一支付类别金额重置为set@payTypeMoney= 0fetch next from projectType_cursor into@type_id,@type_name--内层游标向下移动一行end--插入某一项目各个支付类别的金额合计insert into@map_table values(@project_id,@sumPayTypeMoney)set@sumPayTypeMoney= 0close projectType_cursordeallocate projectType_cursorfetch next from project_cursor into@project_id,@project_name--内层游标处理结束后,外层游标才继续向下移动一行endclose project_cursordeallocate project_cursorselect*from@map_tableENDpublic Map getProjectPayMoneyByPayType() {try {return (Map)this.getHibernateTemplate().execute(new HibernateCallback(){public Object doInHibernate(Session session) throws HibernateException, SQLException { Connection con = session.connection();Statement stmt = con.createStatement();CallableStatement cs = con.prepareCall("{call proc_records}");//ResultSet rs = stmt.executeQuery("{call proc_records}");ResultSet rs = cs.executeQuery();Map map = new HashMap();while (rs.next()) {map.put(rs.getString(1), rs.getString(2));}rs.close();stmt.close();return map;}});} catch ( org.springframework.dao.DataAccessException e) { throw new DataAccessException(e.getMessage(),e);}}。
java sqlserver中存储过程return返回值处理

java sqlserver中存储过程return返回值处理Java与SQL Server中存储过程的返回值处理一、介绍存储过程是一组预先编译的SQL语句集合,可以被视为一种数据库对象,用于执行一系列数据库操作。
在Java应用程序中与SQL Server数据库交互时,经常需要调用存储过程并处理其返回值。
本文将详细介绍在Java中如何调用SQL Server存储过程,并处理其返回值。
我们将按照以下步骤逐一分析。
二、创建存储过程首先,我们需要在SQL Server数据库中创建一个存储过程,用于演示和测试。
假设我们创建一个简单的存储过程,用于根据输入参数获取员工的姓名。
CREATE PROCEDURE GetEmployeeName@EmployeeID INT,@EmployeeName VARCHAR(100) OUTPUTASBEGINSELECT @EmployeeName = EmployeeNameFROM EmployeeWHERE EmployeeID = @EmployeeIDEND这个存储过程接受一个输入参数@EmployeeID,以及一个输出参数@EmployeeName。
它根据输入的员工ID查询数据库,将结果赋值给输出参数@EmployeeName。
三、Java代码中调用存储过程现在,我们可以在Java代码中调用SQL Server中的存储过程。
首先,我们需要建立与数据库的连接。
1. 导入相关的包和类import java.sql.*;2. 建立数据库连接String connectionString ="jdbc:sqlserver:localhost:1433;databaseName=YourDatabase;user=Your User;password=YourPassword";Connection connection =DriverManager.getConnection(connectionString);在上面的代码中,我们使用了JDBC驱动程序建立与数据库的连接。
mybatis sqlserver存储过程返回参数

mybatis sqlserver存储过程返回参数在 MyBatis 中调用存储过程并接收返回参数,可以使用resultMap 来映射返回的结果。
首先,在 MyBatis 的配置文件中配置 resultMap。
例如:```xml<resultMap id="resultMap" type="java.util.HashMap"><result property="param1" column="param1"jdbcType="VARCHAR"/><result property="param2" column="param2"jdbcType="INTEGER"/></resultMap>```然后,在映射的 SQL 语句中调用存储过程,并将返回值映射到 resultMap 中。
例如:```xml<select id="callStoredProcedure" statementType="CALLABLE"> {call stored_procedure_name(#{param1, mode=IN}, #{param2, mode=OUT, jdbcType=INTEGER})}</select>```最后,在 Java 代码中调用该 SQL 语句,并获取返回的参数。
例如:```javaMap<String, Object> params = new HashMap<>();params.put("param1", "input_param1");params.put("param2", null); // 此处为输出参数,初始值可为nullmybatisSession.selectOne("callStoredProcedure", params);String outputParam = (String) params.get("param1"); // 获取输出参数的值int returnValue = (Integer) params.get("param2"); // 获取返回值```注意,调用存储过程时,在 SQL 语句中使用 '{call ...}' 来调用存储过程,并使用 #{param, mode=IN} 和 #{param, mode=OUT, jdbcType=XXX} 定义参数的输入输出模式和类型。
Sql存储过程返回数据集问题汇集

Sql存储过程返回数据集问题汇集SQL Server中存储过程返回记录集很简单,但是如果不加注意,就会很容易出错,得不到正确的记录集。
在昨天写的存储过程中,存储过程书写正确了,但是总是获取不了正确的返回记录集,郁闷了好半天。
后来想起了以前也遇到过同样的问题,居然在同⼀个问题上被绊倒了两次,晕死了。
原因是存储过程中除了返回记录集的select操作外,不能有其他的操作(如插⼊,删除,更新操作),否则返回不了记录集。
我在该存储过程中调⽤了另外的⼀个存储过程(更新操作),把调⽤的存储过程去掉,能正确返回记录集。
另外的两个存储过程中调试时使⽤了print 语句,居然也返回不了记录集,去掉print语句后,就得到了正确的记录集。
如果存储过程需要返回多个记录集,则通过recordset.nextrecordset⽅法获取下⼀个记录集。
有时候,在储存过程中使⽤的是拼接的SQL语句,在⼯作中经常⽤到的就是⾏转列的问题,需要拼接SQL语句。
在存储过程中执⾏拼接的SQL语句需要⽤exec sp_executesql @sql来执⾏,其中@sql必须是nvarchar类型的变量,且长度不能超过4000。
还有在昨天的⼯作中使⽤了⼀个table变量,然后使⽤拼接的sql语句,执⾏的时候居然说是table变量没有定义,好郁闷,逼于⽆奈,在数据库中创建了⼀个临时表才⾏。
后来在⽹上看到说是使⽤sp_executesql来执⾏sql 语句的时候,如果sql语句是操作table变量的,必须将变量定义为全局变量,即@@table型的⽽不是@table型的变量。
不过全局变量在释放的时侯不好办--------------以下是从⽹上转载的存储过程结合ASP操作,时间有限未能转换成 ,不过单纯学习存储过程是够⽤。
ASP与存储过程(Stored Procedures)的⽂章不少,但是我怀疑作者们是否真正实践过。
我在初学时查阅过⼤量相关资料,发现其中提供的很多⽅法实际操作起来并不是那么回事。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQLServer 存储过程返回值总结
1. 存储过程没有返回值的情况 (即存储过程语句中没有 return 之类的语句用方法 int count = ExecuteNonQuery(..执行存储过程其返回值只有两种情况
(1假如通过查询分析器执行该存储过程,在显示栏中假如有影响的行数,则影响几行 count 就是几
(2假如通过查询分析器执行该存储过程, 在显示栏中假如显示 ' 命令已成功完成。
' 则 count = -1;在显示栏中假如有查询结果,则 count = -1
总结:A.ExecuteNonQuery(该方法只返回影响的行数,假如没有影响行数,则该方法的返回值只能是 -1,不会为 0。
B.不论 ExecuteNonQuery(方法是按照
CommandType.StoredProcedure 或者 CommandType.Text 执行, 其效果和 A 一样。
---------------------------------------------------------------------------------------------------------------------------------------------------
2. 获得存储过程的返回值 --通过查询分析器获得
(1不带任何参数的存储过程 (存储过程语句中含有 return
---创建存储过程
CREATE PROCEDURE testReturn
AS
return 145
GO
---执行存储过程
DECLARE @RC int
exec @RC=testReturn
select @RC
---说明
查询结果为 145
(2带输入参数的存储过程 (存储过程语句中含有 return ---创建存储过程
create procedure sp_add_table1
@in_name varchar(100,
@in_addr varchar(100,
@in_tel varchar(100
as
if(@in_name = '' or @in_name is null
return 1
else
begin
insert into table1(name,addr,tel
values(@in_name,@in_addr,@in_tel
return 0
end
---执行存储过程
<1>执行下列,返回 1
declare @count int exec @count = sp_add_table1 '','中三路 ','123456' select @count <2>执行下列,返回 0
declare @count int exec @count = sp_add_table1 '','中三路 ','123456' select @count ---说明
查询结果不是 0就是 1
(3带输出参数的存储过程 (存储过程中可以有 return 可以没有 return
例子 A :
---创建存储过程
create procedure sp_output
@output int output
as
set @output = 121
return 1
---执行存储过程
<1>执行下列,返回 121
declare @out int
exec sp_output @out output
select @out
<2>执行下列,返回 1
declare @out int
declare @count int
exec @count = sp_output @out output
select @count
---说明
有 return ,只要查询输出参数,则查询结果为输出参数在存储过程中最后变成的值;只要不查询输出参数,则查询结果为 return 返回的值
例子 B :
---创建存储过程
create procedure sp_output
@output int output
as
set @output = 121
---执行存储过程
<1>执行下列,返回 121
declare @out int
exec sp_output @out output
select @out
<2>执行下列,返回 0
declare @out int
declare @count int
exec @count = sp_output @out output
select @count
---说明
没有 return ,只要查询输出参数,则查询结果为输出参数在存储过程中最后变成的值;只要不查询输出参数,则查询结果为 0
总结:
(1存储过程共分为 3类:
A. 返回记录集的存储过程 ---------------------------其执行结果是一个记录集,例如:从数据库中检索出符合某一个或几个条件的记录
B. 返回数值的存储过程 (也可以称为标量存储过程 -----其执行完以后返回一个值,例如:在数据库中执行一个有返回值的函数或命令
C. 行为存储过程 -----------------------------------用来实现数据库的某个功能,而没有返回值,例如:在数据库中的更新和删除操作
(2含有 return 的存储过程其返回值为 return 返回的那个值
(3没有 return 的存储过程,不论执行结果有无记录集,其返回值是 0
(4带输出参数的存储过程:假如有 return 则返回 return 返回的那个值,假如要select 输出参数,则出现输出参数的值,于有无 return 无关
---------------------------------------------------------------------------------------------------------------------------------------------------
3. 获得存储过程的返回值 --通过程序获得
---------------------------------------------------------------------------------------------------------------------------------------------------
SqlParameter[] cmdParms = { .. ,new
SqlParameter("@return",SqlDbType.Int};
cmdParms[cmdParms.Length - 1].Direction = ParameterDirection.ReturnValue; 或者
cmdParms[cmdParms.Length - 1].Direction = ParameterDirection.Output或者
cmdParms[cmdParms.Length - 1].Direction = ParameterDirection.Input; 得到返回值 object bj = cmdParms[cmdParms.Length - 1].Value;。