加入时,使用select语句中的列作为函数中的参数

时间:2013-09-17 09:18:53

标签: sql-server tsql sql-function

考虑以下sql查询:

SELECT TaskId,FromItemId, IHV_FROM.NodePath as FromPath
FROM VIEW_TASKS with (nolock) 
left Join fn_ITEM_HIERARCHY(FromItemId) IHV_FROM ON FromItemId = IHV_FROM.ItemId
WHERE ...

fn_ITEM_HIERARCHY是一个接受一个输入参数的函数。我想使用VIEW_TASKS中的FromItemId作为函数的输入参数。 如上所述,我得到错误(Microsoft SQL Server 2008)“无效的列名称”。

SELECT语句返回多个值,因此无法在单独的select语句中将值赋给变量。有什么想法吗?

4 个答案:

答案 0 :(得分:2)

在这种情况下,您可能需要使用OUTER APPLY

SELECT TaskId,FromItemId, IHV_FROM.NodePath as FromPath
FROM VIEW_TASKS with (nolock) 
OUTER APPLY fn_ITEM_HIERARCHY(FromItemId) IHV_FROM
WHERE ...
;

如果函数总是返回行,或者如果您只想要函数返回行的值的结果,请改用CROSS APPLY。

答案 1 :(得分:1)

答案 2 :(得分:0)

使用别名

SELECT t.TaskId, t.FromItemId, IHV_FROM.NodePath as FromPath
FROM VIEW_TASKS t with (nolock) 
left Join fn_ITEM_HIERARCHY(FromItemId) IHV_FROM ON t.FromItemId = IHV_FROM.ItemId

答案 3 :(得分:0)

使用OUTER APPLY代替左连接