sql >> Databáze >  >> RDS >> Sqlserver

Jak chytím více výstupů z uložené procedury do dočasné tabulky

Nemůžete, ne bez úpravy uložené procedury.

V SQL Server můžete pouze vložit první sadu výsledků uložené procedury do jiné tabulky pomocí INSERT...EXEC . Počet sloupců a pozice se musí přesně shodovat a INSERT...EXEC nelze vnořit, tj. nemůžete vložit z proc1 do tabulky v proc2 a poté vložit z proc2 do tabulky v proc3. Takže INSERT...EXEC je zcela neuspokojivé řešení.

Řešením je upravit postup pro vkládání výsledků do dočasných tabulek definovaných v oboru volání, např.:

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

Pokud nemůžete postup upravit, máte smůlu. OPRAVA :jak laskavě zdůraznil HABO, mohli byste použijte CLR k iteraci sad výsledků. Podrobnosti viz odkaz níže. Není to špatné, pokud víte, co děláte, a nemáte jinou možnost.

Další podrobnosti o sdílení dat mezi uloženými procedurami naleznete v tomto velmi obsáhlém článku od Erlanda Sommarskoga:http:// www.sommarskog.se/share_data.html




  1. Určení, zda jsou pole Data v Oracle typu Number

  2. jak vytvořit řetězec oddělený čárkou z pole výsledků dotazu v php codeigniter

  3. Jak porovnat hodnoty Null v MySQL

  4. Jak objednat nebo vybrat řádky v klauzuli MySQL GROUP BY?