あるプロシージャ内において、別のストアドプロシージャから返される結果セットを受け取って使用したく思います。
たとえば、sp_lockなどのシステムプロシージャや自分で記述したプロシージャの結果セットを、
SELECT文のテーブルのように使ったり、一時表に入れ込んだり、などの方法が便利です。
システムストアドプロシージャも使用したいので、関数(FUNCTION)での代用は出来ません。
ご存知の方、ぜひご教示下さい。ヒントでも結構です。
(sp_tablesをsysobjectsから拾う、などは互換性の問題もあり(ServicePack適用で値が変わるかも...)あまりやりたくありません)
構造を合わせたテーブルを作っておけばINSERT INTO テーブル名 EXEC sp_lock
でインサートできますよ。
↓自作のストアドを公開しているので置いておきます。
私もテーブル変数が渡せないかと調べたりしたんですが、テーブル変数のスコープはセッションを越えられなくて諦めました。
「ストアドプロシージャ間で結果セットを受け渡す」には、
1.グローバル一時テーブルを使う。
2.親ストアドプロシージャ内で一時テーブルを作って、その一時テーブルがあるのを前提に子ストアドを作る。
3.テーブル名を文字列で渡し、sp_executesqlで動的にSQLを組み立てる。
ぐらいしかなさそうです。
知りたいのは「ストアドプロシージャ間で結果セットを受け渡す」ことでしょうか。
私のひとつめの回答はシステムストアドプロシージャの結果をテーブルに挿入する方法なので、勘違いならオープンしなくて結構です。
ふたつめの回答は「ストアドプロシージャ間で結果セットを受け渡す」に関連しますが、ズバリではないです。
1つめのほうのご回答で、ズバリ!です。
あるストアドの中で
sp_columnsから、テーブルの列名を引っこ抜いて利用しようと考えておりました。
いるか賞ありがとうございます。なんか久しぶりに貰えてうれしいです。
ストアドがパラメーターにテーブル変数渡せれば最強なんですけどね。