sql >> Databasteknik >  >> RDS >> Sqlserver

Hur tar jag tag i flera utgångar från en lagrad procedur till temptabellen

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




  1. Oracle PL/SQL:Hur gör man DEREF från ett VARRAY av REF?

  2. ASCIISTR() Funktion i Oracle

  3. Hur ställer jag in en gräns för inre fråga i viloläge?

  4. Symbolerna jag bör vara medveten om för SQL-injektion