在一个存储过程中调用另一个存储过程的问题

ruilib 2003-08-13 05:51:51
在一个存储过程a中调用另一个存储过程b,存储过程b是有返回数据集,而在存储过程a中要用到存储过程b所返回的数据集。
...全文
26 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruilib 2003-08-14
  • 打赏
  • 举报
回复
lifeforu(苍白到底) ,不好意思,你的方法也对的,当时我没注意,我怎么给你补分呀
lifeforu 2003-08-14
  • 打赏
  • 举报
回复
算哪门子事啊,我可按你的要求把B存储过程中的结果集返回来给你啦,你居然给这点分,太气人了
nboys 2003-08-13
  • 打赏
  • 举报
回复
create proc b
as
begin
create table #temp(col1,col2.........)
insert #temp exec a
select * from #temp
drop table #temp
end
zjcxc 2003-08-13
  • 打赏
  • 举报
回复
用临时表来保存存储过程b的执行结果集,这样就可以调用结果了.


例如:
--创建存储过程b
create proc b
as
select name from syscolumns
go

--创建存储过程a
create proc a
as
--创建一个临时表,用来保存调用存储过程b的返回结果集.
create table #tb(name varchar(250))
--调用存储过程b,并将结果保存到临时表#tb中
insert into #tb exec b
--显示调用存储过程b的结果
select * from #tb
go
newdongkui 2003-08-13
  • 打赏
  • 举报
回复
补充一个恶心的办法,用全局临时表 ##temp_A

a. 创建##temp_A 做些数据的初始化数据

b.修改增加##temp中的数据

记得drop table ##temp_A
lifeforu 2003-08-13
  • 打赏
  • 举报
回复
CREATE PROCEDURE a ( @cursor CURSOR VARYING OUTPUT )
AS
BEGIN
SET @cursor =CURSOR LOCAL SCROLL FOR
SELECT name from conduct
OPEN @cursor
END

CREATE PROCEDURE b
as
DECLARE @cursor CURSOR
DECLARE @name varchar(10)
EXECUTE a @cursor OUTPUT
IF Cursor_Status('variable', '@cursor') <= 0
BEGIN
select 'error'
END
ELSE
BEGIN
FETCH @cursor INTO @name
select @name
END

exec b

返回游标,和数据集一样用啦
lifeforu 2003-08-13
  • 打赏
  • 举报
回复
CREATE PROCEDURE a ( @cursor CURSOR VARYING OUTPUT )
AS
BEGIN
SET @cursor =CURSOR LOCAL SCROLL FOR
SELECT name from conduct
OPEN @cursor
END

CREATE PROCEDURE b
as
DECLARE @cursor CURSOR
DECLARE @name varchar(10)
EXECUTE a @cursor OUTPUT
IF Cursor_Status('variable', '@cursor') <= 0
BEGIN
select 'error'
END
ELSE
BEGIN
FETCH @cursor INTO @name
select @name
END

exec b
可以返回游标,应该可以和结果集一样用吧
hugeforest 2003-08-13
  • 打赏
  • 举报
回复
在存储过程 a 中 执行 insert 临时表 exec b
select * from 临时表
txlicenhe 2003-08-13
  • 打赏
  • 举报
回复
insert table Exec procName
愉快的登山者 2003-08-13
  • 打赏
  • 举报
回复
insert #t exec a
pengdali 2003-08-13
  • 打赏
  • 举报
回复
create table #临时表(结构和返回结构相同)
insert #临时表 exec 过程名a

select * from #临时表
CrazyFor 2003-08-13
  • 打赏
  • 举报
回复
参考:

1
create table #table(id int identity,txt varchar(1000))
insert into #table(txt) exec master..xp_cmdshell 'dir c:\*.'
select * from #table

2

用存储过程插入数据
在INSERT 语句中可以通过执行存储过程来取得要插入的数据所插入的数据是存储
过程中SELECT 语句所检索的结果集使用存储过程插入数据的语法如下
INSERT [INTO]
{ table_name WITH ( <table_hint_limited> [...n])
| view_name
| rowset_function_limited }
{ [(column_list)]
EXECUTE procedure
其中procedure 既可以是一个已经存在的系统存储过程或用户自定义的存储过程也
可以在INSERT 语句中直接编写存储过程
例11-4 对每个部门求员工工资总额并把结果存入department_info 表中
use pangu
insert into department_info(dept_id, d_wage)
execute ('select dept_id, sum(e_wage)
from employee
group by dept_id')
select * from department_info
运行结果如下
(7 row(s) affected)
dept_id d_chief_name d_location e_num d_wage
------- -------------------- -------------------------------------------------- ------ ------------
1001 dbo NULL NULL 15000.0000
1002 dbo NULL NULL 19500.0000

22,210

社区成员

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

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