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

*** *** ***는 단지 구조화 된 쿼리 언어 * - 많은 데이터베이스 sys 하지만 데이터베이스 제품이 아닌 ... 많은 것들이 벤더에 따라 다르므로 - ** 우리는 실제로 ** 데이터베이스 시스템 ** (그리고 어떤 버전)을 사용하고 있는지 알고 있어야합니다 (그에 따라 태그를 업데이트하십시오) ... –

+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

다른 프로 시저에서 하나의 프로 시저를 실행하면 호출자 SP에서 결과 집합을 얻지 못하고 결과 집합이 호출자에게 전달됩니다. 결과 집합을 사용해야하는 경우

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