ストアドプロシージャの結果セットから列を選択する 質問する

ストアドプロシージャの結果セットから列を選択する 質問する

80列、300行を返すストアドプロシージャがあります。そのうち2列を取得するSELECT文を書きたいです。

SELECT col1, col2 FROM EXEC MyStoredProc 'param1', 'param2'

上記の構文を使用すると、次のエラーが発生します:

「列名が無効です」。

最も簡単な解決策はストアド プロシージャを変更することだとわかっていますが、私はそれを作成していないので、変更できません。

私が望むことを実現する方法はあるでしょうか?

  • 結果を入れるための一時テーブルを作成することもできますが、列が 80 個あるため、2 列を取得するためだけに 80 列の一時テーブルを作成する必要があります。返されるすべての列を追跡するのは避けたかったのです。

  • WITH SprocResults AS ....マークの提案通りに使用してみましたが、2つのエラーが発生しました

    キーワード 'EXEC' 付近の構文が正しくありません。
    ')' 付近の構文が正しくありません。

  • テーブル変数を宣言しようとしましたが、次のエラーが発生しました

    挿入エラー: 列名または指定された値の数がテーブル定義と一致しません

  • 試してみると
    SELECT * FROM EXEC MyStoredProc 'param1', 'param2'
    エラーが発生します:

    キーワード 'exec' 付近の構文が正しくありません。

ベストアンサー1

クエリを分割できますか? ストアド プロシージャの結果をテーブル変数または一時テーブルに挿入します。次に、テーブル変数から 2 つの列を選択します。

Declare @tablevar table(col1 col1Type,..
insert into @tablevar(col1,..) exec MyStoredProc 'param1', 'param2'

SELECT col1, col2 FROM @tablevar

おすすめ記事