2011-04-27 20 views
1

私はかなり複雑なt-sqlクエリを作成しています(DBAではないので私の基準では)その中で私がスカラー関数として抽象化して単一の値を計算して取得する、より複雑なサブクエリです。サブクエリ/関数の2番目の列からデータが必要であることがわかってから、今は止まってしまいました。明らかに、私は関数を複数の値を返すためにprocに変換することができます(あるいはサブクエリを直接メインクエリ内で宣言することもできます)。しかし、どのようにして親のselectクエリを個々のカラムとしてきれいに得ることができますか?サブクエリでサブクエリ/ procコールでサブクエリを選択するクエリ

結果を連結(カンマ区切り)したり、FOR XML(別のテーブルから*。1データを返す別のサブクエリにクエリが含まれています)を使用するなど、厄介なことをすることはできますが、 Entity Frameworkを使用しており、この2つの特定の値を厳密に型指定したままにしておくことをお勧めします。私のグーグルではEXISTSの使用が増え続けていますが、選択クエリから実際にカラムを取得する場所の例は表示されません。つまり、複数のカラムを使用してwhere句にロジックを適用するためにのみ使用されます。

これは実行できないものですか?私の最後の手段は、サブクエリをより多くの結合として結合しようとすることですが、私はクエリを読み込み可能に維持しようとしています。事前に

おかげで - 私は

:-)受け入れる用意しています答えはここに私が変更したいスカラー関数を使用して、「小説」の例だもある「いいえ、これは行うことはできません」

SELECT t1.Field1, 
     t2.Field2, 
     ,dbo.fn_Select_ComplexStuff(t1.Field3) AS ComplexStuff 
FROM MyTable1 AS t1 
INNER JOIN MyTable2 AS t2 ON t1.id = t2.id 
WHERE t1.Field4 = 'Albatross' 

答えて

0

あなたが現在table-valued functionへのスカラー関数として持っているものに変換した後、最終的な結果セットを構築するためにあなたのFROM clauseCROSS APPLY演算子を使用します。ストアドプロシージャ2列を返します。

ストアドプロシージャを他のクエリに構成することはできません。UDFから複数の値(列)を返す唯一の方法は、テーブル値であるためです(単一のスカラー値ではなく結果セットを返します) )。

+0

どのように知っているときに簡単に!あなたの返事にとても感謝してくれました:-) – Rob