как вызвать вложенную хранимую процедуру 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  

person Salwa Mirza    schedule 06.07.2013    source источник
comment
SQL — это всего лишь язык структурированных запросов — язык, используемый многими системами баз данных, но не являющийся продуктом базы данных... многие вещи зависят от поставщика. конкретно - поэтому нам действительно нужно знать, какую систему базы данных (и какую версию) вы используете (пожалуйста, обновите теги соответствующим образом)....   -  person marc_s    schedule 07.07.2013
comment
Дополнительное примечание (при условии, что вы используете SQL Server): вы не должны не использовать префикс sp_ для своих хранимых процедур. Microsoft зарезервировала этот префикс для собственного использования ( см. Именование хранимых процедур), и вы рискуете столкнуться с конфликтом имен в будущем. Это также плохо сказывается на производительности ваших хранимых процедур. Лучше просто избегать sp_ и использовать в качестве префикса что-то другое - или вообще не использовать префикс!   -  person marc_s    schedule 07.07.2013
comment
@marc_s Спасибо. Я не знал об именовании хранимых процедур.   -  person Salwa Mirza    schedule 07.07.2013
comment
Заголовок stackoverflow.com/questions/20105443/ это может быть повторяющийся вопрос imho. но я позволю вам решить, оставить это или нет.   -  person granadaCoder    schedule 17.05.2019


Ответы (2)


Вы можете обмениваться данными между процедурами, используя временные (или постоянные) таблицы.

В первой процедуре вы можете настроить временную таблицу, например:

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
person jpw    schedule 06.07.2013

Когда вы выполняете одну процедуру из другой, вы не получаете результирующий набор в вызывающей программе SP, результирующий набор передается вызывающей стороне. Если вам нужно использовать набор результатов, который вы используете

INSERT INTO XXX
EXEC [sp name]
person Luis LL    schedule 06.07.2013