Aufrufen gespeicherter Prozeduren

Gilt für: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

Gespeicherte Prozeduren können auf dem Server oder aus einer Clientanwendung aufgerufen werden. In beiden Fällen werden gespeicherte Prozeduren immer auf dem Server ausgeführt, entweder im Kontext des Servers oder einer Datenbank. Zum Ausführen einer gespeicherten Prozedur sind keine besonderen Berechtigungen erforderlich. Nach dem Hinzufügen einer gespeicherten Prozedur von einer Assembly zum Server- oder Datenbankkontext kann diese gespeicherte Prozedur von jedem Benutzer ausgeführt werden, sofern die Rolle des Benutzers die von der gespeicherten Prozedur durchgeführten Aktionen ermöglicht.

Eine gespeicherte Prozedur wird in MDX auf dieselbe Weise wie eine systeminterne MDX-Funktion aufgerufen. Für eine gespeicherte Prozedur ohne Parameter wird der Name der Prozedur und ein leeres Paar Klammern verwendet, wie im Folgenden gezeigt:

MyStoredProcedure()  

Falls die gespeicherte Prozedur Parameter hat, werden diese in der richtigen Reihenfolge, durch Kommas getrennt, angegeben. Das folgende Beispiel zeigt eine gespeicherte Beispielprozedur mit drei Parametern:

MyStoredProcedure("Parameter1", 2, 800)  

Aufrufen von gespeicherten Prozeduren in MDX-Abfragen

In allen MDX-Abfragen muss die gespeicherte Prozedur den für einen MDX-Ausdruck erforderlichen, syntaktisch richtigen Typ zurückgeben. Wenn die gespeicherte Prozedur nicht den richtigen Typ zurückgibt, tritt ein MDX-Fehler auf. Die folgenden Beispiele zeigen gespeicherte Prozeduren, die eine Menge, ein Element und das Ergebnis einer mathematischen Operation zurückgeben.

Zurückgeben einer Menge

In den folgenden Beispielen wird die gespeicherte Prozedur MySproc implementiert, die eine Menge zurückgibt. Im ersten Beispiel gibt MySproc die Menge direkt an den SELECT-Ausdruck zurück. In den nächsten beiden Beispielen gibt MySproc die Menge als Argument für die Funktionen Crossjoin und DrilldownLevel zurück.

SELECT MySetProcedure(a,b,c) ON 0 FROM Sales  
SELECT Crossjoin(MySetProcedure(a,b,c)) ON 0 FROM Sales  
SELECT DrilldownLevel(MySetProcedure(a,b,c)) ON 0 FROM Sales  

Zurückgeben eines Elements

Das folgende Beispiel zeigt die Funktion MySproc, die ein Element zurückgibt:

SELECT Descendants(MySproc(a,b,c),3) ON 0 FROM Sales  

Zurückgeben des Ergebnisses einer mathematischen Operation

SELECT Country.Members on 0, MySproc(Measures.Sales) ON 1 FROM Sales  

Aufrufen von gespeicherten Prozeduren mit der CALL-Anweisung

Gespeicherte Prozeduren können außerhalb des Kontexts einer MDX-Abfrage mithilfe der MDX-Aufrufanweisung aufgerufen werden.

Sie können diese Methode verwenden, um entweder die Nebeneffekte einer gespeicherten Abfrage zu instanziieren, oder damit die Anwendung die Ergebnisse einer gespeicherten Abfrage erhält. Eine häufige Verwendung der Call-Anweisung besteht darin, Analysis Management Objects (AMO) zum Ausführen von Verwaltungsfunktionen zu verwenden, die kein Rückgabeergebnis aufweisen. Der folgende Befehl ruft beispielsweise eine gespeicherte Prozedur auf:

Call MyStoredProcedure(a,b,c)  

Der einzige unterstützte Typ, der von einer gespeicherten Prozedur in einer Call-Anweisung zurückgegeben wird, ist ein Rowset. Die Serialisierung für ein Rowset wird durch XML for Analysis definiert. Wenn eine gespeicherte Prozedur in einer Call-Anweisung einen anderen Typ zurückgibt, wird sie ignoriert und nicht in XML an die aufrufende Anwendung zurückgegeben. Weitere Informationen zu XMLA-Rowsets (XML for Analysis) finden Sie unter XMLA-Schemarowsets.

Wenn eine gespeicherte Prozedur ein .NET-Rowset zurückgibt, konvertiert SQL Server Analysis Services das Ergebnis auf dem Server in ein XML for Analysis-Rowset. Das XML for Analysis-Rowset wird immer von einer gespeicherten Prozedur in der Funktion Aufruf zurückgegeben. Wenn ein Dataset Funktionen enthält, die nicht in einem XMLA-Rowset ausgedrückt werden können, tritt ein Fehler auf.

Prozeduren, die void zurückgeben (wie z. B. Unterroutinen in Visual Basic), können ebenfalls mit dem CALL-Schlüsselwort verwendet werden. Beispielsweise wird die MyVoidFunction()-Funktion in einer MDX-Anweisung mit folgender Syntax verwendet:

CALL(MyVoidFunction)  

Weitere Informationen

Verwaltung von mehrdimensionalen Modellassemblys
Definieren gespeicherter Prozeduren