2013-07-06 53 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 ***只是*結構化查詢語言* - 許多數據庫系統使用的語言sys tems,但不是數據庫產品......很多東西都是特定於供應商的 - 所以我們真的需要知道您使用的數據庫系統**(以及哪個版本)(請相應地更新標籤)。 –

+0

附註(假設您使用的是** SQL Server **):您應該**不要**爲存儲過程使用'sp_'前綴。微軟已經保留了這個前綴以供自己使用(參見*命名存儲過程*)](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中獲得結果集,結果集將轉到調用程序。如果你需要使用結果集使用

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