Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak pobrać wiele danych wyjściowych z procedury składowanej do tabeli tymczasowej?

Nie możesz, nie bez modyfikacji procedury składowanej.

W SQL Server, możesz wstawić tylko pierwszy zestaw wyników procedury składowanej do innej tabeli, poprzez INSERT...EXEC . Liczba kolumn i pozycje muszą dokładnie pasować, a INSERT...EXEC nie można zagnieżdżać, tj. nie można wstawić z proc1 do tabeli w proc2, a następnie wstawić z proc2 do tabeli w proc3. Więc INSERT...EXEC jest całkowicie niesatysfakcjonującym rozwiązaniem.

Obejściem tego problemu jest modyfikacja procedury w celu wstawienia wyników do tabel tymczasowych zdefiniowanych w zakresie wywołania, np.:

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

Jeśli nie możesz zmodyfikować procedury, nie masz szczęścia. KOREKTA :jak uprzejmie zauważył HABO, możesz użyj środowiska CLR do iteracji zestawów wyników. Zobacz link poniżej, aby uzyskać szczegółowe informacje. Nieźle, jeśli wiesz, co robisz i nie masz innego wyboru.

Więcej informacji na temat udostępniania danych między procedurami składowanymi można znaleźć w tym bardzo obszernym artykule autorstwa Erlanda Sommarskoga:http:// www.sommarskog.se/share_data.html




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Włączenie programu SQL Server do rozproszonej transakcji XA

  2. Porównanie ciągów SQL uwzględniających wielkość liter

  3. Błąd klucza otwartego SQL Server 2008 po zmianie serwera fizycznego

  4. Jak utworzyć złożony klucz obcy w SQL Server (przykład T-SQL)

  5. SQL — sklonuj rekord i jego potomków