请问select查询语句如何调用存储过程?

zhenlisuozai 2012-08-14 12:21:33
如题:

table1表:字段a1,a2,a3
存储过程Pro1 a1,a2,a3(本来是函数,可以实现,但由于查询表不确定要实现动态执行,所以只能改成存储过程)
变量@count
select @count=sum(pro1 a1,a2,a3) from table1
我要实现这样的,请问如何实现?
...全文
6366 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhenlisuozai 2012-08-14
  • 打赏
  • 举报
回复
这样没法实现呀
白天的猫头鹰 2012-08-14
  • 打赏
  • 举报
回复
非常遗憾告诉你存储过程这样不行,只能采用这种方式变通
insertt #TableName
exec pro_ProcedureName
zhenlisuozai 2012-08-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]
SQL code
SELECT *
FROM OPENROWSET('SQLOLEDB', 'SERVER=sss;uid=sa;pwd=123;Database=db ', 'exec sp') AS a
[/Quote]

这个好像不能实现我这个要求吧。

看来也只能用maco_wang说的这种方法了。
zhenlisuozai 2012-08-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
select @count=sum(pro1 a1,a2,a3) from table1
这一句实现什么功能?
[/Quote]

通过存储过程pro1获取每行的数据,比如求和,再把此列的所有行数据相加赋值给变量@count
筱筱澄 2012-08-14
  • 打赏
  • 举报
回复
SELECT  *
FROM OPENROWSET('SQLOLEDB', 'SERVER=sss;uid=sa;pwd=123;Database=db ', 'exec sp') AS a
筱筱澄 2012-08-14
  • 打赏
  • 举报
回复
openrowset
6442b974c5bde03f 2012-08-14
  • 打赏
  • 举报
回复
select @count=sum(pro1 a1,a2,a3) from table1
这一句实现什么功能?
叶子 2012-08-14
  • 打赏
  • 举报
回复

create table table1(a1 int ,a2 int,a3 int)
insert table1
select 1,3,4 union all
select 2,3,4 union all
select 6,7,8 union all
select 9,1,6 union all
select 12,13,16

select * from table1
/*
a1 a2 a3
----------- ----------- -----------
1 3 4
2 3 4
6 7 8
9 1 6
12 13 16
*/

go
--随便写个存储过程
create proc Proc_table1
(@a1 int ,@a2 int, @a3 int)
as
begin
select 2*@a1+3*@a2+@a3
end

go
create table #t(asum int)
declare my_cursor cursor for
select a1,a2,a3 from table1
open my_cursor
declare @a1 int, @a2 int,@a3 int
fetch next from my_cursor into @a1,@a2,@a3
while(@@fetch_status=0)
begin
insert into #t exec Proc_table1 @a1,@a2,@a3 --执行存储过程
fetch next from my_cursor into @a1,@a2,@a3
end
close my_cursor
deallocate my_cursor
select sum(asum) from #t
/*
179
*/
drop table #t
6442b974c5bde03f 2012-08-14
  • 打赏
  • 举报
回复
如果a1标识,可以用a1实现循环
zhenlisuozai 2012-08-14
  • 打赏
  • 举报
回复
函数不支持动态执行,也不能调用存储过程。所以函数不行,只能用存储过程。
游标的话怎么用?
叶子 2012-08-14
  • 打赏
  • 举报
回复
函数的话可以直接使用。

如果是存储过程的话,可以用游标逐行循环数据。
zhenlisuozai 2012-08-14
  • 打赏
  • 举报
回复
存储过程名称Pro1,需要传递的参数是a1,a2,a3。存储过程中需要查询的表是不确定的,根据a1(a1为ID)组合成表名,再用exec sp_executesql查询获取结果。
table1表的字段a1,a2,a3分别对应存储过程Pro1的三个参数。
6442b974c5bde03f 2012-08-14
  • 打赏
  • 举报
回复
请把你的存储过程再介绍一下,“存储过程Pro1 a1,a2,a3”这句话什么意思,是一个存储过程,还是三个存储过程,若是三个存储过程,每个存储过程的变量分别是什么?
zhenlisuozai 2012-08-14
  • 打赏
  • 举报
回复
本来就是函数,不行才改成存储过程的
quchen520 2012-08-14
  • 打赏
  • 举报
回复
好像不行,期待高手
建议你还是想怎么改函数来解决吧

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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