sql >> Database >  >> RDS >> Sqlserver

Hoe pak ik meerdere uitgangen van een opgeslagen procedure in de tijdelijke tabel?

Dat kan niet, niet zonder de opgeslagen procedure te wijzigen.

In SQL Server kunt u alleen de eerste resultatenset van een opgeslagen procedure in een andere tabel invoegen, via INSERT...EXEC . Het aantal kolommen en de posities moeten exact overeenkomen, en INSERT...EXEC kan niet worden genest, dat wil zeggen dat u niet vanuit proc1 in een tabel in proc2 kunt invoegen en vervolgens vanuit proc2 in een tabel in proc3 kunt invoegen. Dus INSERT...EXEC is een totaal onbevredigende oplossing.

De tijdelijke oplossing is om de procedure aan te passen om resultaten in tijdelijke tabellen in te voegen die zijn gedefinieerd in het aanroepende bereik, bijvoorbeeld:

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

Als je de procedure niet kunt wijzigen, heb je pech. CORRECTIE :zoals HABO vriendelijk opmerkte, zou gebruik de CLR om de resultatensets te herhalen. Zie onderstaande link voor details. Niet erg als je weet wat je doet en geen andere keus hebt.

Voor meer details over het delen van gegevens tussen opgeslagen procedures, zie dit zeer uitgebreide artikel van Erland Sommarskog:http:// www.sommarskog.se/share_data.html




  1. Hoe MySql-tabellen te importeren / herstellen met behulp van PHP

  2. ORA-00907 bij het maken van een CHECK-beperking

  3. Haal de waarde van alle kolommen uit de ene tabel en haal de waarde van de andere kolom uit de tweede tabel

  4. MySQL - DATE_ADD maandinterval