2014-06-27 42 views
0

任何人都可以簡要解釋爲什麼無法使用表的值作爲連接函數的參數嗎?TSQL使用連接的表數據作爲函數參數

;CREATE FUNCTION "foo" (@id INT) 
RETURNS @result TABLE 
(
    "value" INT 
) 
AS 
BEGIN 
    INSERT INTO @result SELECT @id * 2 
    RETURN 
END; 

;WITH "cte" AS 
(
    SELECT "id" = 1 
    UNION ALL 
    SELECT 2 
) 
SELECT 
    * 
FROM 
    cte 
    , "foo"(cte."id") 

最後一行引發錯誤(〜cte。「id」無法綁定)。 如果它是一個cte或表,它並不重要。

+5

使用CROSS APPLY –

+4

原因是,您的函數返回一個'TABLE',並且您正試圖向列中添加一個表。正如@DimiToulakis提到的,您可以在這裏使用'CROSS APPLY'或'OUTER APPLY'。或者將你的功能改變爲一個單值功能。 – Kaf

+0

@DimiToulakis謝謝。雖然只有三個字,但我想接受你的提示作爲正確答案。你可以添加它作爲答案? – Nico

回答

0

通過使用CROSS APPLY來完成從表值函數中發現的連接結果集。