Du kan inte, inte utan att ändra den lagrade proceduren.
I SQL Server kan du bara infoga den första resultatuppsättningen av en lagrad procedur i en annan tabell, via INSERT...EXEC
. Kolumnantal och positioner måste matcha exakt, och INSERT...EXEC
kan inte kapslas, dvs du kan inte infoga från proc1 i en tabell i proc2, och sedan infoga från proc2 i en tabell i proc3. Så INSERT...EXEC
är en helt otillfredsställande lösning.
Lösningen är att ändra proceduren för att infoga resultat i tillfälliga tabeller definierade i anropsomfånget, t.ex.:
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
Om du inte kan ändra proceduren har du ingen tur. RÄTTELSE :som HABO vänligt påpekade, kan du använd CLR för att iterera resultatuppsättningarna. Se länken nedan för detaljer. Inte så illa om du vet vad du gör och inte har något annat val.
För mer information om delning av data mellan lagrade procedurer, se denna mycket omfattande artikel av Erland Sommarskog:http:// www.sommarskog.se/share_data.html