Você não pode, não sem modificar o procedimento armazenado.
No SQL Server, você só pode inserir o primeiro conjunto de resultados de um procedimento armazenado em outra tabela, via
INSERT...EXEC
. A contagem de colunas e as posições devem corresponder exatamente, e INSERT...EXEC
não pode ser aninhado, ou seja, você não pode inserir de proc1 em uma tabela em proc2 e, em seguida, inserir de proc2 em uma tabela em proc3. Então INSERT...EXEC
é uma solução totalmente insatisfatória. A solução é modificar o procedimento para inserir resultados em tabelas temporárias definidas no escopo de chamada, por exemplo:
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
Se você não pode modificar o procedimento,
Para obter mais detalhes sobre o compartilhamento de dados entre procedimentos armazenados, consulte este artigo muito abrangente de Erland Sommarskog:http:// www.sommarskog.se/share_data.html