Prozeduren lassen sich nicht in SELECT Statements verwenden. Sie müssen ausgeführt werden. Im Prinzip eine sehr logische Sache, da Prozeduren einerseits mehrere Ergebnistabellen zurückgeben könnte bzw. – wenn nur INSERT, UPDATE oder DELETE Statements ausgeführt werden würden – auch gar nichts zurückgeben müsste.
Ein paar Ausnahmen gibst allerdings schon 😉
Der Standardweg wäre, das Ergebnis der Prozedur in eine temporäre Tabelle zu schreiben und mit dieser dann weiter zu arbeiten.
Der Weg Nr 2, ist der Umweg mittels OPENROWSET. Eine AdHoc Abfrage auf einen SQL Server, in unserem Fall auf den eigenen. Die AdHoc Abfrage ist natürlich mit allen Einschränkungen zu genießen wie z.B.:
- Geschwindigkeit
- Es wird das erste Resultset zurückgegeben, falls es mehrere gäbe
Hier nun die simplen Beispiele
–Variante 1 – Temporäre Tabelle
create table #t1 (product varchar(50), total int)
insert into #t1
exec CustorderHist ‚ALFKI‘
select * from #t1
–Variante 2 – OPENROWSET
Select * from
OPENROWSET(‚SQLNCLI‘,
‚Server=.;Trusted_Connection=yes;‘, —. Für lokale Std Instanz
‚exec northwind.dbo.custOrderHist “ALFKI“‘) ProcTab
INNER JOIN Products P on P.ProductName = ProcTab.Productname
where
ProcTab.Total > 10
Cool, gell?