SQL Server存储过程能否返回多个OUT参数及实现示例咨询
SQL Server存储过程多输出参数实现说明
SQL Server 完全支持存储过程同时返回多个OUT(输出)参数,和Oracle的输出参数逻辑基本一致,单参数返回问题通常是参数声明或调用时的语法遗漏导致。
实现示例
1. 存储过程定义
以下是包含2个输入参数、2个输出参数的存储过程示例:
CREATE OR ALTER PROCEDURE dbo.GetTwoOutputValues -- 输入参数 @InputA INT, @InputB INT, -- 输出参数需显式加OUTPUT关键字声明 @AddResult INT OUTPUT, @MultiplyResult INT OUTPUT AS BEGIN SET NOCOUNT ON; -- 避免影响应用端参数接收 -- 给两个输出参数分别赋值 SET @AddResult = @InputA + @InputB; SET @MultiplyResult = @InputA * @InputB; END GO
2. SQL端调用测试
调用时输出参数必须追加OUTPUT关键字才能拿到返回值,这是最常见的遗漏点:
-- 定义变量接收输出结果 DECLARE @GetAdd INT, @GetMultiply INT; -- 调用存储过程,输出参数后必须加OUTPUT标记 EXEC dbo.GetTwoOutputValues @InputA = 8, @InputB = 6, @AddResult = @GetAdd OUTPUT, @MultiplyResult = @GetMultiply OUTPUT; -- 查看返回的两个结果 SELECT @GetAdd AS 求和结果, @GetMultiply AS 乘积结果;
注意:如果调用时某个输出参数漏加
OUTPUT关键字,SQL Server不会抛出错误,但对应变量无法拿到返回的赋值,这就是仅能返回一个参数值的最常见诱因。
3. 应用端调用示例(C#为例)
应用层调用时需显式指定参数方向为Output:
using (SqlConnection conn = new SqlConnection("你的数据库连接字符串")) { conn.Open(); SqlCommand cmd = new SqlCommand("dbo.GetTwoOutputValues", conn); cmd.CommandType = CommandType.StoredProcedure; // 添加入参 cmd.Parameters.AddWithValue("@InputA", 8); cmd.Parameters.AddWithValue("@InputB", 6); // 添加第一个输出参数 SqlParameter addParam = new SqlParameter("@AddResult", SqlDbType.Int); addParam.Direction = ParameterDirection.Output; cmd.Parameters.Add(addParam); // 添加第二个输出参数 SqlParameter mulParam = new SqlParameter("@MultiplyResult", SqlDbType.Int); mulParam.Direction = ParameterDirection.Output; cmd.Parameters.Add(mulParam); // 执行存储过程 cmd.ExecuteNonQuery(); // 同时读取两个输出参数的返回值 int addResult = (int)addParam.Value; int multiplyResult = (int)mulParam.Value; }
其他编程语言的调用逻辑一致,只要正确标记参数为输出方向,即可同时获取多个输出参数的返回值。
内容的提问来源于stack exchange,提问作者John O'Neil
相关产品推荐
相关产品推荐

