Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come acquisisco più output da una procedura memorizzata nella tabella temporanea

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