ストアドプロシージャを変更せずに行うことはできません。
SQL Serverでは、を介して、ストアドプロシージャの最初の結果セットを別のテーブルに挿入することしかできませんINSERT...EXEC
。列の数と位置は正確に一致する必要INSERT...EXEC
があり、ネストすることはできません。つまり、proc1からproc2のテーブルに挿入してから、proc2からproc3のテーブルに挿入することはできません。完全INSERT...EXEC
に満足のいく解決策でもありません。
回避策は、呼び出し元のスコープで定義された一時テーブルに結果を挿入するようにプロシージャを変更することです。例:
create proc get_some_data as
insert #temp1 (col1, col2) select col1, col2 from table1
insert #temp2 (colA, colB) select colA, colB from table2
go
create table #temp1 (col1 int, col2 int)
create table #temp2 (colA int, colB int)
exec get_some_data
select * from #temp1
select * from #temp2
drop table #temp1
drop table #temp2
go
手順を変更できない場合は、あなたは運が悪い。 訂正: HABOが親切に指摘したように、CLRを使用して結果セットを反復することができます。詳細については、以下のリンクを参照してください。自分が何をしているのかを知っていて、他に選択肢がなければ、それほど悪くはありません。
ストアドプロシージャ間でのデータ共有の詳細については、Erland Sommarskogによるこの非常に包括的な記事を参照してください:http://www.sommarskog.se/share_data.html