2012-05-14 6 views
0

私は多くを検索しましたが、複数の列を一度に返すサブクエリはありません。次のコードは動作しますが、それは吸う:サブクエリから複数の列を選択する

私は実際に関数にib.Idを渡し、fnGetItemPath機能を3回を呼び出さずに全体の列1、列2、COLUMN3列を取得する方法は考えを持っていない
SELECT 
    (SELECT Column1 FROM dbo.fnGetItemPath(ib.Id)) AS Col1, 
    (SELECT Column2 FROM dbo.fnGetItemPath(ib.Id)) AS Col2, 
    (SELECT Column3 FROM dbo.fnGetItemPath(ib.Id)) AS Col3 
FROM ItemBase ib 

ありがとうございます。

+0

を?それがテーブル値の関数なら、それは動作するはずです – Dan

+0

はい、それはテーブル値の関数です。しかし、上記のSQLコードは実際には効率的ではありません。なぜなら、別々の関数を別々に3回実行しなければならず、これは役に立たないからです。一度に3つの列を一度取得するためには、関数を一度実行するメカニズムが必要です。何か案が? –

+0

テーブル値関数の場合は、上記のようにする必要はありません。SELECT * FROM dbo.fnGetItemPath(ib.Id)) – Dan

答えて

4

"FROM"部分に移動し、outer apply(またはクロス適用)を使用することができます。

チェックは自分で構文が、それはこのようなものになります。あなたは関数のコードを投稿することができ

SELECT Column1, Column2, Column3 
FROM ItemBase ib 
Outer Apply dbo.fnGetItemPath(ib.Id) 
0

この作品はありませんか?

select 
    (select column1, column2, column3 from dbo.fnGetItemPath(ib.Id)) 
from ItemBase ib 

または別のものが必要ですか?

+2

いいえ、そうではありません。 "サブクエリがEXISTSで導入されていない場合は、選択リストに1つの式しか指定できません。" –

関連する問題