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önnten bzw. - wenn nur INSERT, UPDATE oder DELETE Statements ausgeführt werden würden - auch gar nichts zurückgeben müssten.
Ein paar Ausnahmen gibt's 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?