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 は、1 つの入力パラメーターを受け取る関数です。関数への入力パラメーターとして 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

左結合の代わりに OUTER APPLY を使用する

于 2013-09-17T09:47:02.943 に答える
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 に答える