
現在、実行するとあるレコードセット(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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
速度が低下し無効になったアド...
-
Outlook 送受信エラー
-
エクセルのxans.について
-
ストアドプロシージャのネスト
-
MySQL5.5 viewの処理速度改善に...
-
mysql+phpをつかったカートつく...
-
差し込み後、元データを変更し...
-
Excelシート上で右クリックがで...
-
カーソル宣言をIFで分けられま...
-
エクセルに見えない文字(JISX0...
-
リストビューの項目の内容を変...
-
エクセルで最後の文字だけ置き...
-
DB設計について
-
末尾の全角スペースの削除
-
for whichの使い方
-
wechatアプリについての質問で...
-
SQLサーバから、項目の属性(型...
-
SQLServerで文字列の末尾からあ...
-
Access パラメータクエリをcsv...
-
access2003 クエリSQL文に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Outlook 送受信エラー
-
Excel再起動でアドインのタブが...
-
エクセルで個人用マクロの配布方法
-
速度が低下し無効になったアド...
-
エクセルのxans.について
-
パワーポイントのアドインのソ...
-
広告ブロッカーのアドカードと...
-
excel 複数のアドインソフトの...
-
VB.NETでテキストボックスから...
-
ストアドから得られるレコード...
-
ExcelのContributeツールバーを...
-
Excelから自作アドインを完全に...
-
ストアドプロシージャのネスト
-
ストアド内で動的にSQLを作る際...
-
携帯のアドレス変更の時に・・・
-
ストアドプロシージャの条件分...
-
ストアドプロシージャの変数に...
-
outlook2016のアドイン
-
Excelのアドインについて
-
複数アドインプログラムをひと...
おすすめ情報