2014-06-27 40 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来完成从表值函数中发现的连接结果集。