一个简单的存储过程:如何输出多个查询得到的值

javaxbenz 2008-06-24 10:46:46
如我想实现类似下面这样简单的功能

ALTER PROCEDURE [dbo].[mysp]
@output1 float output,
@output2 float output,
@output3 float output,
AS
BEGIN
SET NOCOUNT ON;
SELECT @output1= sum(成交金额) from 清算流水 where 服务部 = 1
SELECT @output2= sum(成交金额) from 清算流水 where 服务部 = 2
SELECT @output3= sum(成交金额) from 清算流水 where 服务部 = 3
END

可是 output1、output2 output3出来的都是0.该怎么写存储过程才能分别得到这3个值呢?
...全文
359 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
javaxbenz 2008-06-25
  • 打赏
  • 举报
回复
原来reporting services 中只能取存储过程的第一个结果集
happysophie 2008-06-24
  • 打赏
  • 举报
回复
我也试过了,很奇怪,也有问题。
如果我单独运行过程其中的查询,绝对能得到数据。
但写入过程,然后调用过程,则得到的结果是0。
调试过程,单步执行,算出来@output1,@output2都有值,但无法返回两个变量。
我用的是我的表的值。
create table test (name char(1),j int)
insert into t(name,j) select 'A',100
insert into t(name,j) select 'A',200
insert into t(name,j) select 'B',320
insert into t(name,j) select 'A',100
insert into t(name,j) select 'B',90
insert into t(name,j) select 'A',460
insert into t(name,j) select 'A',510

--过程:
create PROCEDURE [dbo].[mysp]
@output1 float output,
@output2 float output
AS
BEGIN
SET NOCOUNT ON
SELECT @output1= sum(j) from t where name = 'A'
SELECT @output2= sum(j) from t where name = 'B'
return
END

--调用
declare @t1 float,@t2 float
set @t1=0.0
set @t2=0.0
exec mysp @t1,@t2
select @t1,@t2

--结果:
----------------------------------------------------- -----------------------------------------0.0 0.0

(1 row(s) affected)




怎么回事?高手帮助解答吧
dsk22657 2008-06-24
  • 打赏
  • 举报
回复
先看SELECT sum(成交金额) from 清算流水 where 服务部 = 1 是不是0
utpcb 2008-06-24
  • 打赏
  • 举报
回复
ALTER PROCEDURE [dbo].[mysp]
@output1 float output,
@output2 float output,
@output3 float output,
AS
BEGIN
SELECT @output1=sum(case 服务部 when 1 then 成交金额 else 0 end),
@output2=sum(case 服务部 when 2 then 成交金额 else 0 end),
@output3=sum(case 服务部 when 3 then 成交金额 else 0 end)
from 清算流水

END




楼主要确认你的数据是不是为零哦!
pt1314917 2008-06-24
  • 打赏
  • 举报
回复

ALTER PROCEDURE [dbo].[mysp]
@output1 float output,
@output2 float output,
@output3 float output,
AS
BEGIN
SELECT @output1=sum(case 服务部 when 1 then 成交金额 else 0 end),
@output2=sum(case 服务部 when 2 then 成交金额 else 0 end),
@output3=sum(case 服务部 when 3 then 成交金额 else 0 end)
from 清算流水

END

linguojin11 2008-06-24
  • 打赏
  • 举报
回复
批处理中我怎么没看到局部变量@t1,@t2啊。。只看见OUT PUT的变量,
那执行存储过程的时候要将变量传给哪个变量接收,然后返回OUTPUT变量
happysophie 2008-06-24
  • 打赏
  • 举报
回复
我查了书,在调用的时候,用以下语句

declare @t1 float,@t2 float
set @t1=0.0
set @t2=0.0
exec mysp @t1 output,@t2 output
select @t1,@t2


就是运行时指定@t1,@t2指明关键字output,才能将过程中的值传入批处理中的局部变量@t1,@t2。
运行结果:

-------------------------- -----------------------------------
1370.0 410.0

(1 row(s) affected)

wlzd3636 2008-06-24
  • 打赏
  • 举报
回复
declare @sql nvarchar(500),@output1 int ,@output2 int
set @sql=' SET NOCOUNT ON'+ char(13)
+'SELECT @output1= sum(j) from t where name = '+'''A'''+ char(13)
+'SELECT @output2= sum(j) from t where name = '+'''B'''
exec sp_executesql @sql, N'@output1 int output,@output2 int output',@output1 output,@output2 output
select @output1,@output2



----------- -----------
1370 410

(1 行受影响)
javaxbenz 2008-06-24
  • 打赏
  • 举报
回复
楼上的跟我一样,直接执行存储过程算出来@output1,@output2都有值。

但是如果在visual studio 作的报表中引用这几个从存储过程中出来的值,

报表显示出来的应该都是null,什么都没有显示出来。
内容概要:本文围绕“重磅粉丝福利专栏1.7电力系统潮流和最优潮流”展开,重点介绍电力系统中潮流计算与最优潮流(Optimal Power Flow, OPF)的核心理论与Matlab仿真实现方法。内容涵盖交直流混合配电网的统一求解潮流算法、基于改进智能优化算法(如粒子群、遗传算法等)的无功优化与最优潮流求解,并结合IEEE标准节点系统(如IEEE30、IEEE33等)进行建模与仿真验证。专栏强调实际科研复现能力,提供大量Matlab代码实例,帮助读者掌握电力系统稳态分析的关键技术,深入理解电网运行的经济性与安全性优化机制。; 适合人群:具备电力系统分析基础,熟悉Matlab编程,从事电气工程、能源系统优化等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:① 掌握电力系统潮流计算的基本原理与数求解方法;② 学习如何利用智能优化算法求解最优潮流问题,实现电网无功优化、降低网损、提升电压稳定性;③ 通过Matlab代码复现经典论文案例,提升科研仿真与工程实践能力。; 阅读建议:建议结合文中提供的Matlab代码与IEEE标准测试系统进行动手实践,重点关注算法实现细节与参数设置,同时参考配套论文深入理解模型构建逻辑,以达到理论与仿真深度融合的学习效果。
内容概要:本文档系统梳理了2026年软考高项考试中涉及的公共基础、新一代信息技术及法律法规相关内容,重点涵盖信息化发展战略(如数字中国、新基建、工业互联网、车联网、元宇宙)、信息技术基础(计算机体系结构、网络、数据库、信息安全)、五大新兴技术(物联网、云计算、大数据、区块链、人工智能)的核心概念与应用,以及IT治理、IT审计、信息系统管理方法。同时详细解读了《招标投标法》《政府采购法》《民法典合同编》《网络安全法》《数据安全法》《个人信息保护法》等关键法律法规的核心条款,并提供了知识产权与标准规范的相关知识。最后整理了专业英语高频词汇和各模块的高频考点速记表,帮助考生高效备考。; 适合人群:准备参加2026年或2027年软考高项的信息系统项目管理人员、IT从业人员及技术管理者,尤其适合需要系统掌握信息化发展、新技术应用与法律合规知识的考生。; 使用场景及目标:①系统复习软考高项中公共基础、新技术与法规模块的核心考点;②掌握云计算、大数据、区块链、AI等技术的基本原理与应用场景;③理解招投标、政府采购、合同、网络安全与数据保护等法律法规的关键内容;④提升专业英语阅读能力,熟悉高频术语。; 阅读建议:结合高频考点速记表进行重点记忆,对法律法规部分关注“高频考点”标注内容,技术部分建议对照实际案例理解应用,专业英语建议反复背诵表格词汇以提高答题速度。

34,875

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧