2016-06-15 18 views
1

ストアドプロシージャYをストアドプロシージャYのSELECTステートメント内から実行したいので、Xの値をYのデータの一部として返すことができます。別のストアドプロシージャのSELECTステートメント内からストアドプロシージャを実行しますか?

次の構文を試していますが、明らかに無効です。

上記のとおりですが、適切な戻り値を得るには、現在の行の型の値をプロシージャXに渡す必要があります。

免責事項:私がやっていることは分かりません。

+1

あなたは、単一の列の値を取得するには、ストアドプロシージャを使用することはできません。おそらくストアドプロシージャを使用するのは間違ったアプローチですか?インラインテーブル値関数のようなものはより適切でしょう。 –

+0

私はまだあなたがストアドプロシージャを使用することができない理由を見ることができません。 – Denn

+0

@Dennストアドプロシージャは整数を返すためです。結果セットはストアドプロシージャから実際には返されません。結果セットが1つしか返されないという保証はありません。そして、与えられた結果セットに複数の列があるのを防ぐことはありません。これは、論理的にはこのような手順を使用する意味がありません。 –

答えて

5

あなたが試したアプローチは無効です。ストアドプロシージャとしてXの代わりにuser-defined functionと変換します。

Create function dbo.fnGetTypeDetail 
(
@type varchar(50) 
) 
returns varchar(100) 
As 
Begin 
    return --do your operation; 
End 

としてクエリを置き換える以下のように:

サンプルについて
SELECT name, type, dbo.fnGetTypeDetail(type) AS TypeDetail 
FROM table 

、私はスカラー関数を作成しました。あなたの要件に基づいて、example

+2

これはうまくいくと思いますが、スカラー関数はひどく非効率です。列の値として使用すると、ひどいことになります。 –

+0

レスポンスを待っているうちに、私は先に進んで(Sean Langeのオリジナル投稿ごとに)関数を作成することができ、必要な値を得ることができました。皆さん、ありがとうございました。その日を救った! – SlowCoder74

0

のようなインラインテーブル評価関数を作成することができます。SELECT文の中にストアドプロシージャをEXECすることはできません。

あなたができることは、INSERT..EXECがtempテーブルにprocを格納し、そのtempテーブルを照会するSELECTステートメントを実行し、必要に応じて他のテーブルに参加することです。

擬例:

INSERT INTO #Tmp (Column1) EXEC X; 

SELECT Name, Type, (SELECT Column1 FROM #tmp) 
FROM MyTable 
関連する問題