処理の構成上、ストアドプロシジャーから他のストアドプロシジャーを呼び出してその処理結果を使用したい場合が発生します。
そんな時に役立つテクニックです。
呼び出したストアドプロシジャーの戻り値を使用する
処理の構成上、ストアドプロシジャーから他のストアドプロシジャーを呼び出してその処理結果を使用したい場合が発生します。
そんな時に役立つテクニックです。
呼び出されるストアドプロシジャーを作成する
まず、呼び出される側のストアドプロシジャーを作成します。
内容を簡単にするために与えられた引数と、それに+1だけする結果を返すストアドにします。
CREATE PROCEDURE [dbo].[test_called_proc] @num INT = 10 AS BEGIN SELECT @num AS no UNION SELECT @num+1 AS no ORDER BY no END
このストアドプロシジャーを呼び出すと
EXEC test_called_proc @num=20
結果は
no 20 21
となります。
ストアドプロシジャーの実行結果を呼び出し側で利用する
今度はこの「test_called_proc @num=20」の実行結果の値を使って新しい処理結果を作成します。
呼び出したストアドプロシジャーの実行結果を利用するにはテンポラリテーブルを作ってその中に呼び出したストアドプロシジャーの実行結果を保存して使用します。
--テンポラリテーブル作成 CREATE TABLE #test_tmp ( no INT ) --ストアドプロシジャーを実行してテンポラリテーブルに保存 INSERT INTO #test_tmp EXEC test_called_proc @num=20 --テンポラリテーブルのnoに0を足して表示 SELECT no + 20 AS no FROM #test_tmp ORDER BY no --念のためテンポラリーテーブル削除 DROP TABLE #test_tmp
上記の実行結果は
no 40 41
となりストアドプロシジャーの実行結果を呼び出した側で使用することができました。
注意事項
作成するテンポラリテーブルの構成は呼び出すストアドプロシジャーが返す列の数、属性が一致している必要があります。