Du kan ikke, ikke uden at ændre den lagrede procedure.
I SQL Server kan du kun indsætte det første resultatsæt af en lagret procedure i en anden tabel via INSERT...EXEC
. Kolonneantal og positioner skal matche nøjagtigt, og INSERT...EXEC
kan ikke indlejres, dvs. du kan ikke indsætte fra proc1 i en tabel i proc2, og derefter indsætte fra proc2 i en tabel i proc3. Så INSERT...EXEC
er en fuldstændig utilfredsstillende løsning.
Løsningen er at ændre proceduren for at indsætte resultater i midlertidige tabeller defineret i opkaldsomfanget, f.eks.:
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
Hvis du ikke kan ændre proceduren, er du ikke heldig. RETTELSE :Som HABO venligt påpegede, kunne du brug CLR til at gentage resultatsættene. Se linket nedenfor for detaljer. Ikke så dårligt, hvis du ved, hvad du laver, og ikke har noget andet valg.
For flere detaljer om deling af data mellem lagrede procedurer, se denne meget omfattende artikel af Erland Sommarskog:http:// www.sommarskog.se/share_data.html