2010-04-10 63 views
0

如何從另一個存儲過程調用存儲過程並將結果作爲第一個列返回?從另一個存儲過程調用存儲過程並將結果作爲新列返回

ALTER PROCEDURE [dbo].[GetItems] 
AS 
SET NOCOUNT ON 

SELECT ID, AddedDate, Title,Description, 
     Result of Stored Procedure "CountAll" call with parameter ID as Total 
FROM dbo.Table1 

還有︰如何如果CountAll存儲過程返回一些列而不是標量?

+0

如果您告訴我們它做了什麼,那麼您可能不需要「CountAll」的存儲過程。 – Thomas 2010-04-10 15:05:22

+0

托馬斯,統計所有計數從另一個表的一些條目以ID爲參數 – luppi 2010-04-10 15:13:15

+0

鑑於這一點,你不應該需要一個sp。如果您向我們提供CountAll過程的詳細信息,我們可以更具體一些,但通常,SQL語法中有很多方法可以在單個查詢中獲取計數。 – Thomas 2010-04-10 15:21:47

回答

4

輸出繼電器參數爲一個值:

EXEC CountAll @Total OUTPUT 
SELECT ID, AddedDate, Title,Description,@total as Total 
FROM dbo.Table1 

或者使用CROSS APPLY:

SELECT ID, AddedDate, Title,Description,@total as Total 
FROM dbo.Table1 
CROSS APPLY 
(SELECT soemthing as total FROM .... WHERE...) 

或者使用UDF

或派生表

SELECT ID, AddedDate, Title,Description, totals.Total 
FROM 
    dbo.Table1 T 
    JOIN 
    (SELECT count(*) as Total, id FROM dbo.Table1 GROUP BY ID) totals ON T.ID = totals.id 

如果存儲過程返回多PLE列,那麼你必須使用UDF,跨應用,派生表或返回2個結果集到客戶端

基本上,存儲的特效不能用你想

+0

CountAll需要傳遞一個ID參數... – luppi 2010-04-10 15:14:22

+0

基本上我想要爲返回給用戶的table1的每一行執行CountAll – luppi 2010-04-10 15:16:18

+0

好的,使用CROSS APPLY或udf或派生表,然後 – gbn 2010-04-10 15:31:08

1
SELECT ID, AddedDate, Title,Description, 
     , (Select Count(*) 
      From OtherTable 
      Where Table1.Id = OtherTable.Id) As ItemCount 
FROM dbo.Table1 
方式

你不應該」 t需要一個存儲過程來簡單地從另一個表中獲取項目的數量。你可以在子查詢中完成。

0

您需要用戶定義的函數UDF而不是過程。 (如果我記得你不能從UDF調用存儲過程)

如何重構你的查詢的其他可能性在aswer中顯示。

相關問題