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

Hvordan får jeg fat i flere output fra en lagret procedure til en midlertidig tabel

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




  1. Hvordan bestemmer man, om en post med en bestemt IMAGE-datatype allerede findes i tabellen?

  2. Hvorfor bruger postgres trigram word_similarity-funktionen ikke et gin-indeks?

  3. Postgres 9.4 jsonb-array som tabel

  4. SQL Server - Giv en logintilladelse til læseadgang til alle eksisterende og fremtidige databaser