Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como faço para pegar várias saídas de um procedimento armazenado na tabela temporária


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, você está sem sorte. CORREÇÃO :como HABO gentilmente apontou, você poderia use o CLR para iterar os conjuntos de resultados. Veja o link abaixo para detalhes. Não é tão ruim se você sabe o que está fazendo e não tem outra escolha.

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