如何调用嵌套存储过程sql

时间:2013-07-06 12:54:56

标签: sql sql-server-2012-express

我正在尝试使用第一个存储过程的结果,该结果为我提供了分配给特定专家的提案列表。从那个结果我想要那些提案的相关项目。

我的第一个问题是:

ALTER proc [dbo].[sp_ExpsAssignedProp]
(  
@username as varchar(50)  
)  
as  
begin  
select pro.ProposalID,pro.Title,pro.GrantAmount from tbl_Registration reg  
inner join tbl_Expert exp On reg.RegID=exp.RegID  
inner join tbl_Panel pan On pan.ExpertID_1=exp.ExpertID   
OR pan.ExpertID_2=exp.ExpertID  
OR pan.ExpertID_3=exp.ExpertID  
inner join tbl_Association asso On asso.PanelID=pan.PanelID  
inner join tbl_Proposal pro On asso.ProposalID=pro.ProposalID  
where reg.Username=@username  
end  

现在我试着将结果用于第二个查询,但是它给了我所有状态为完成的项目。我关注的是获得已分配提案的项目状态为已完成。

alter proc [dbo].sp_AssignedProj  
(  
@username as varchar(50),  
@status as varchar(50)  
)  
as  
begin  
exec sp_ExpsAssignedProp   
select proj.ProjectID, proj.Title, proj.Budget, proj.StartDate, proj.FinishDate,    proj.CurrentStatus from  
tbl_Proposal prop   
inner join tbl_Project proj On prop.ProposalID=proj.ProposalID  
where CurrentStatus=@status  
end  

2 个答案:

答案 0 :(得分:0)

当您从另一个程序执行一个过程时,您没有在调用者SP中获得结果集,结果集将转到调用者。如果您需要使用结果集,请使用

INSERT INTO XXX
EXEC [sp name]

答案 1 :(得分:0)

您可以使用临时(或永久)表在程序之间共享数据。

在第一个程序中,您可以设置一个临时表,如:

CREATE TABLE #TempTableName
(
    <table definition that matches what's being inserted here>
)

然后将所需内容插入其中:

INSERT #TempTableName EXEC myStoredProc

在第二个程序中,您可以使用数据然后删除表格:

SELECT * FROM #TempTableName (or JOIN or whatever).
DROP TABLE #TempTableName