繁体   English   中英

如何调用嵌套存储过程sql

[英]how to call nested stored procedure sql

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

我的第一个查询是:

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  

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

在第一个过程中,您可以建立一个临时表,例如:

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

当您从另一个执行一个过程时,您不会在调用方SP中得到结果集,结果集将转到调用方。 如果需要使用结果集,请使用

INSERT INTO XXX
EXEC [sp name]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM