Hallo zusammen,
die Ausgangssituation ist folgende:
ich habe eine Stored Procedure (Bezeichnung beispielhaft: spQuelle) geschrieben, die mehrere temporäre Tabellen verwendet, welche wiederum mit INSERT INTO #... SELECT ... befüllt werden.
Diese Stored Procedure möchte ich als Datenlieferant für eine andere Stored Procedure (Bezeichnung beispielhaft: spZiel) verwenden. Das von spQuelle gelieferte Rowset soll in spZiel wieder in eine temporäre Tabelle gespeichert werden.
Hier der auf das Wesentliche abgespeckte Code der Stored Procedure spQuelle:
create table #tResult(
Nachname varchar(50))
insert into #tResult select Nachname from Kunden
In der Prozedur spQuelle werden etliche, natürlich komplexere temporäre Tabellen auf diese Weise erzeugt.
Zum Schluß werden die einzelnen temporären Tabellen über Joins miteinander verknüpft und als ein einziges Ergebnis-Rowset zurückgegeben.
Beim Aufruf der Prozedur mit
exec spQuelle
tritt kein Fehler auf und die Prozedur liefert das erwartete Ergebnis-Rowset.
Dieses Ergebnis-Rowset wiederum soll in der die spQuelle aufrufenden Stored Procedur spZiel in einer temporären Tabelle gespeichert werden. Dafür wollte ich erst folgende Anweisung verwenden:
create table #tQuelldaten (
Nachname varchar(50))
insert into #tQuelldaten exec spQuelle
Allerdings erhalte ich hier die Meldung, dass INSERT INTO-Anweisungen nicht geschachtelt werden können.
Nach einigen Recherchen im Internet bin ich auf die OPENROWSET-Anweisung gestoßen und habe die ursprüngliche INSERT INTO-Anweisung in spZiel folgendermaßen abgeändert ("myDB" ist die beispielhafte Bezeichnung der Datenbank):
insert into #tQuelldaten
SELECT Nachname FROM OPENROWSET ('SQLOLEDB','Server=(local);TRUSTED_CONNECTION=YES;','EXEC [myDB].[dbo].[spQuelle]')
Hier erhalte ich jetzt allerdings die Meldung:
Ungültiger Objektname '#tResult'
Die Frage: Die Stored Procedure spQuelle funktioniert anstandslos, wenn sie mit "exec spQuelle" aufgerufen wird. Weshalb erhalte ich die oben genannte Meldung, wenn ich sie mit OPENROWSET aufrufe und wie kann ich das Problem beheben?
Oder gibt es noch eine andere, optimalere Lösung, auf das Ergebnis-Resultset einer Stored Procedure zuzugreifen, wenn diese temporäre Tabellen verwendet? Vielleicht eine CLR-Assembly?
Ich dachte auch schon an eine Table-Variable, befürchte aber Performanceeinbußen.
Vielen Dank und viele Grüße
Michael