考虑以下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语句中将值赋给变量。有什么想法吗?
答案 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)
使用Cross apply如此处所示
http://blog.sqlauthority.com/2008/01/03/sql-server-2005-last-ran-query-recently-ran-query/
答案 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代替左连接