Non puoi, non senza modificare la procedura memorizzata.
In SQL Server, puoi solo inserire il primo set di risultati di una procedura memorizzata in un'altra tabella, tramite INSERT...EXEC
. Il conteggio delle colonne e le posizioni devono corrispondere esattamente e INSERT...EXEC
non può essere nidificato, cioè non puoi inserire da proc1 in una tabella in proc2, e quindi inserire da proc2 in una tabella in proc3. Quindi INSERT...EXEC
è una soluzione del tutto insoddisfacente.
La soluzione consiste nel modificare la procedura per inserire i risultati nelle tabelle temporanee definite nell'ambito della chiamata, ad esempio:
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 non riesci a modificare la procedura, sei sfortunato. CORREZIONE :come ha gentilmente sottolineato HABO, tu potresti utilizzare il CLR per iterare i set di risultati. Vedere il collegamento sotto per i dettagli. Non male se sai cosa stai facendo e non hai altra scelta.
Per maggiori dettagli sulla condivisione dei dati tra le procedure memorizzate, vedere questo articolo molto completo di Erland Sommarskog:http:// www.sommarskog.se/share_data.html