2011-08-11 53 views
1

我有一個存儲過程需要在返回一個表的函數上進行內部聯接。試圖調用它像這樣:加入表函數的存儲過程?

INNER JOIN [dbo].[udf_GetBillingInfo(@QuoteID)] billInfo ON quotes.QuoteID = billInfo.QuoteID 

給出了一個錯誤invalid object name dbo.udf_GetBillingInfo(@QuoteID)

考慮我的要求,我不認爲我可以做的函數到視圖,因爲它有它的邏輯的一個小位。我怎樣才能加入結果?我是否必須將函數結果賦值給一個變量或某種性質的變量?

+1

你應該可以加入TVF。你確定架構和tvf名稱是正確的? –

回答

5

你的問題是,方括號中的答案 - [dbo].[udf_GetBillingInfo(@QuoteID)] - 他們引用無論是內部的功能名稱。

它改成這樣:

[dbo].udf_GetBillingInfo(@QuoteID) 
+0

哈,就是這樣;我忘了[]表示**列**的名稱,所以它在考慮函數的名稱*和*參數是一列。 Failz。 –

+0

或[dbo]。[udf_GetBillingInfo](@ QuoteID) – canon

+0

D'oh!我不敢相信我錯過了那個! +1 –

-1

你可以寫你的函數作爲表函數嗎?我想你可能會發現這裏

tsql returning a table from a function or store procedure

+1

這不是問題的答案。(不是我的downvote順便說一句) –

+0

確實。重新閱讀這個問題後,我可以看到你實際上說它是一個表格函數。 –

0

這裏是連結到TVF的(啞)例如,希望它幫助!

CREATE FUNCTION MyFunc (@p1 int) RETURNS TABLE 
AS 
RETURN 
(
     SELECT @p1 AS a 
     union 
     SELECT @p1 +1 AS a 
     union 
     SELECT @p1 +2 AS a 
) 
GO 

declare @t table (c int) 
insert @t (c) values(1),(2),(3),(4) 

select * 
from @t t 
left join dbo.MyFunc(1) f on t.c = f.a