2013-07-06 3 views
0

Я пытаюсь использовать результат первой хранимой процедуры, которая дает мне список предложений, которые назначены конкретному эксперту. Из этого результата я хочу, чтобы соответствующие проекты этих предложений.как вызвать вложенную хранимую процедуру 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 [email protected] 
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 [email protected] 
end 
+0

*** SQL *** - это только * Структурированный язык запросов * - язык, используемый многими системами баз данных но не продукт базы данных ... многие вещи специфичны для поставщиков, поэтому нам действительно нужно знать, что ** система баз данных ** (и какая версия) вы используете (пожалуйста, обновите теги соответственно) .... –

+0

Боковое примечание (при условии, что вы используете ** SQL Server **): вы не должны ** использовать префикс 'sp_' для ваших хранимых процедур. Microsoft [зарезервировала этот префикс для собственного использования (см. * Именование сохраненных процедур *)] (http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx) и вы рискуете столкнуться с именем когда-нибудь в будущем. [Это также плохо для производительности вашей хранимой процедуры] (http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix). Лучше просто просто избегать 'sp_' и использовать что-то еще в качестве префикса - или никакого префикса вообще! –

+0

@marc_s Спасибо. Я не знал об именах хранимых процедур. –

ответ

0

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

INSERT INTO XXX 
EXEC [sp name] 
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 
Смежные вопросы