Freigeben über


Aufrufen gespeicherter Prozeduren

Gespeicherte Prozeduren können auf dem Server oder von der Clientanwendung aufgerufen werden. In beiden Fällen werden gespeicherte Prozeduren immer auf dem Server ausgeführt, entweder der Kontext des Servers oder einer Datenbank. Es sind keine speziellen Berechtigungen zum Ausführen einer gespeicherten Prozedur erforderlich. Sobald eine gespeicherte Prozedur von einer Assembly zum Server- oder Datenbankkontext hinzugefügt wird, kann jeder Benutzer die gespeicherte Prozedur ausführen, solange die Rolle für den Benutzer die von der gespeicherten Prozedur ausgeführten Aktionen zulässt.

Das Aufrufen einer gespeicherten Prozedur in MDX erfolgt auf die gleiche Weise wie das Aufrufen einer systeminternen MDX-Funktion. Für eine gespeicherte Prozedur, die keine Parameter akzeptiert, werden der Name der Prozedur und ein leeres Paar Klammern verwendet, wie hier gezeigt:

MyStoredProcedure()  

Wenn die gespeicherte Prozedur einen oder mehrere Parameter akzeptiert, werden die Parameter in der Reihenfolge durch Kommas getrennt angegeben. Im folgenden Beispiel wird eine gespeicherte Beispielprozedur mit drei Parametern veranschaulicht:

MyStoredProcedure("Parameter1", 2, 800)  

Aufrufen gespeicherter Prozeduren in MDX-Abfragen

In allen MDX-Abfragen muss die gespeicherte Prozedur den syntaktisch korrekten Typ zurückgeben, der von einem MDX-Ausdruck benötigt wird. Wenn eine gespeicherte Prozedur nicht den richtigen Typ zurückgibt, tritt ein MDX-Fehler auf. Die folgenden Beispiele veranschaulichen gespeicherte Prozeduren, die einen Satz, ein Element und das Ergebnis eines mathematischen Vorgangs zurückgeben.

Zurückgeben eines Satzes

In den folgenden Beispielen wird eine gespeicherte Prozedur namens MySproc implementiert, die einen Satz zurückgibt. Im ersten Beispiel gibt MySproc den Satz direkt im SELECT-Ausdruck zurück. In den zweiten beiden Beispielen gibt MySproc den Satz 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 Mitglieds

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

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

Zurückgeben des Ergebnisses eines mathematischen Vorgangs

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

Aufrufen gespeicherter Prozeduren mit der Call-Anweisung

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

Sie können diese Methode verwenden, um die Nebenwirkungen einer gespeicherten Abfrage oder für die Anwendung zu instanziieren, um die Ergebnisse einer gespeicherten Abfrage abzurufen. Eine häufige Verwendung der Call Anweisung wäre die Verwendung von Analysis Management Objects (AMO) zum Ausführen von Administrativen Funktionen, die kein Rückgabeergebnis aufweisen. Beispielsweise ruft der folgende Befehl eine gespeicherte Prozedur auf:

Call MyStoredProcedure(a,b,c)  

Der einzige unterstützte Typ, der aus der gespeicherten Prozedur in einer Call Anweisung zurückgegeben wird, ist ein Rowset. Die Serialisierung für ein Rowset wird durch XML für die Analyse 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 XML für Analysis-Rowsets finden Sie unter XML für Analysis Schema Rowsets.

Wenn eine gespeicherte Prozedur ein .NET-Rowset zurückgibt, konvertiert Analysis Services das Ergebnis auf dem Server in einen XML-Code für Analysis-Rowset. Das XML für Analysis-Rowset wird immer von einer gespeicherten Prozedur in der Call Funktion zurückgegeben. Wenn ein Dataset Features enthält, die nicht im XML für Analysis-Rowset ausgedrückt werden können, führt ein Fehler zu einem Fehler.

Prozeduren, die leere Werte zurückgeben (z. B. Unterroutinen in Visual Basic), können auch mit dem CALL-Schlüsselwort verwendet werden. Wenn Sie beispielsweise die Funktion MyVoidFunction() in einer MDX-Anweisung verwenden möchten, wird die folgende Syntax verwendet:

CALL(MyVoidFunction)  

Siehe auch

Verwaltung von mehrdimensionalen Modellassemblys
Definieren gespeicherter Prozeduren