4

考虑以下 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

4 回答 4

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。

于 2013-09-17T09:31:26.257 回答
1

使用交叉应用,如此处所示

http://blog.sqlauthority.com/2008/01/03/sql-server-2005-last-ran-query-recently-ran-query/

于 2013-09-17T09:22:09.640 回答
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
于 2013-09-17T09:22:26.040 回答
0

使用 OUTER APPLY 而不是左连接

于 2013-09-17T09:47:02.943 回答