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