Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie erfasse ich mehrere Ausgaben einer gespeicherten Prozedur in einer temporären Tabelle

Sie können nicht, nicht ohne die gespeicherte Prozedur zu ändern.

In SQL Server können Sie die erste Ergebnismenge einer gespeicherten Prozedur nur über INSERT...EXEC in eine andere Tabelle einfügen . Spaltenanzahl und Positionen müssen genau übereinstimmen, und INSERT...EXEC kann nicht verschachtelt werden, dh Sie können nicht von proc1 in eine Tabelle in proc2 einfügen und dann von proc2 in eine Tabelle in proc3 einfügen. Also INSERT...EXEC ist eine insgesamt unbefriedigende Lösung.

Die Problemumgehung besteht darin, die Prozedur so zu ändern, dass Ergebnisse in temporäre Tabellen eingefügt werden, die im aufrufenden Bereich definiert sind, z. B.:

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

Wenn Sie das Verfahren nicht ändern können, haben Sie Pech. KORREKTUR :wie HABO freundlicherweise darauf hingewiesen hat, Sie könnten Verwenden Sie die CLR, um die Ergebnismengen zu iterieren. Siehe Link unten für Details. Nicht schlecht, wenn Sie wissen, was Sie tun, und keine andere Wahl haben.

Weitere Einzelheiten zum Teilen von Daten zwischen gespeicherten Prozeduren finden Sie in diesem sehr umfassenden Artikel von Erland Sommarskog:http:// www.sommarskog.se/share_data.html