現在、実行するとあるレコードセット(1行1列のみ)を返すストアドプロシージャProc_Aがありますが、このプロシージャを実行して得られる結果を、
別のプロシージャProc_Bで、以下のような形で使用したいと考えています。
ただし、Case文内部でのストアドの実行や、変数へのストアドの実行結果の代入を試しましたが、どちらもうまくいっていません。
なにか、よい解決策があれば、教えていただければ、と思います。
パターンA) Case内部で直接実行
select
case Table_A.param_1
when 0 then Exec Proc_A '***','**'
else ''
end
パターンB)いったんパラメータとして取得
declare @values as char(10)
execute sp_executesql N'@values = Proc_A ''***'',''**''', N'@values char(10) OUTPUT', @values OUTPUT
No.1ベストアンサー
- 回答日時:
あまり自信はないのですが、なかなか回答が付かないようですので・・・
私もちょっと試してみたのですが、ストアドプロシージャが返すレコードセットを別のSQL分のパラメータとして使用するのは、普通の方法では無理そうでした。
そこで、「普通の方法では無理」ということを前提にした上で、次の方法はいかがでしょうか。
(1) ストアドプロシージャの構造を変える
Proc_Aがレコードセットを返すのではなく変数に値を返す構造になっていれば、問題はないわけです。
ですので、Proc_Aと同じレコードセット(1行1列)をパラメータとして返す新しいストアドプロシージャProc_A'を作成し、それを使用するのはいかがでしょうか。
なお、現状でProc_Aも必要としているのであれば、Proc_AとProc_A'でほぼ同じクエリが重複してしまうので、Proc_AはProc_A'を使用する形に書き直すほうがより好ましいかと思います。
(2) 超が付くほど強引な方法です
ストアドプロシージャProc_Aの内容(SQL文)を取得することは可能なので、それをそっくり取得して、その中にあるSELECT ...をSELECT @var=...に変更してダイナミック実行し、取得した値をパラメータとして返すのはいかがでしょうか。
Proc_Aが自前のストアドプロシージャであれば(1)のように書き換えてしまえばいいわけですが、ヨソのストアドプロシージャであって内容がいつどのように変わるか定かではないという場合には、こんな方法を取るのもやむを得ないのかなと思います。
ありがとうございます。
結局この件については、(1)の方法で対応を取ることにしました。
もともとのプロシージャに手を加え、オプションの値によって、レコードセットと変数と、値の返し先を変更できるようにしました。
このような感じです。
こうすることで、もともとのプロシージャを利用している部分でも書き換えが不要になりました。
---------------------------------
create proceadure Proc_A
@value ...,
@opt as int = 0,
@out as varchar(100) OUTPUT
as
...処理...
set @value = 結果
if @opt = 1
set @out = @value
else
select @value
GO
---------------------------------
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL 次の時間帯の勝率の合計を求めるSQL文 1 2023/07/04 17:12
- その他(プログラミング・Web制作) Rでのスクリプトのご相談 3 2022/12/08 16:22
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- UNIX・Linux linuxサーバーのキャッシュをクリアするコマンドを実行したい。 5 2023/01/24 14:52
- Visual Basic(VBA) 先ほど、回答者様によって教えていただいたのですがどうしたらいいか分かりません。 ユーザーフォーム上に 2 2023/02/21 22:25
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- Visual Basic(VBA) エクセル VBA 難しいです 1 2023/02/21 15:39
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Outlook 送受信エラー
-
エクセルで個人用マクロの配布方法
-
速度が低下し無効になったアド...
-
Word2007でアドインタブが表示...
-
Excel再起動でアドインのタブが...
-
excel 複数のアドインソフトの...
-
差し込み後、元データを変更し...
-
フィルターかけた後、重複を除...
-
SQLで特定の項目の重複のみを排...
-
for whichの使い方
-
エクセルで最後の文字だけ置き...
-
selectした大量データをinsert...
-
列番号による項目の取得について
-
SQL文で、合計が0のレコードを...
-
INSERT文でフィールドの1つだ...
-
カーソル0件の時にエラーを発生...
-
副問合せの書き方について
-
Access:クエリーにて集計後に...
-
UWSCでMOUSEORG関数が上手く処...
-
ある条件の最大値+1を初番する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
速度が低下し無効になったアド...
-
Outlook 送受信エラー
-
Excel再起動でアドインのタブが...
-
パワーポイントのアドインのソ...
-
エクセルのxans.について
-
エクセルで個人用マクロの配布方法
-
広告ブロッカーのアドカードと...
-
ストアド内で動的にSQLを作る際...
-
Excelから自作アドインを完全に...
-
VB.NETでテキストボックスから...
-
ストアドから得られるレコード...
-
ストアドから特定のキーワード...
-
複数アドインプログラムをひと...
-
excel 複数のアドインソフトの...
-
Word2007でアドインタブが表示...
-
Excel:アドイン自作の方法は?
-
アウトルックで、以前利用して...
-
ストアドプロシージャのネスト
-
ストアドプロシージャの変数に...
-
CSVを取込むストアドプロシージ...
おすすめ情報