次の方法で共有


ストアド プロシージャの呼び出し

ストアド プロシージャは、サーバーまたはクライアント アプリケーションから呼び出すことができます。 いずれの場合も、ストアド プロシージャは常にサーバー上で実行され、サーバーまたはデータベースのコンテキストで実行されます。 ストアド プロシージャを実行するために特別なアクセス許可は必要ありません。 アセンブリによってストアド プロシージャがサーバーまたはデータベース コンテキストに追加されると、ユーザーのロールでストアド プロシージャによって実行されるアクションが許可されている限り、ユーザーはストアド プロシージャを実行できます。

MDX でのストアド プロシージャの呼び出しは、組み込みの MDX 関数の呼び出しと同じ方法で行われます。 パラメーターを受け取っていないストアド プロシージャの場合、次に示すように、プロシージャの名前と空のかっこのペアが使用されます。

MyStoredProcedure()  

ストアド プロシージャが 1 つ以上のパラメーターを受け取る場合、パラメーターはコンマで区切られた順序で指定されます。 次の例は、3 つのパラメーターを持つサンプル ストアド プロシージャを示しています。

MyStoredProcedure("Parameter1", 2, 800)  

MDX クエリでのストアド プロシージャの呼び出し

すべての MDX クエリで、ストアド プロシージャは、MDX 式に必要な構文上正しい型を返す必要があります。 ストアド プロシージャが正しい型を返さない場合は、MDX エラーが発生します。 次の例では、セット、メンバー、数学演算の結果を返すストアド プロシージャを示します。

セットを返す

次の例では、セットを返す MySproc と呼ばれるストアド プロシージャを実装します。 最初の例では、MySproc は SELECT 式で直接セットを返します。 2 番目の 2 つの例では、MySproc は Crossjoin 関数と DrilldownLevel 関数の引数としてセットを返します。

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  

メンバーを返す

次の例は、メンバーを返す MySproc 関数を示しています。

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

算術演算の結果を返す

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

呼び出しステートメントを使用してストアド プロシージャを呼び出す

ストアド プロシージャは、MDX Call ステートメントを使用して、MDX クエリのコンテキスト外で呼び出すことができます。

このメソッドを使用して、格納されているクエリの副作用をインスタンス化するか、アプリケーションで格納されたクエリの結果を取得できます。 Call ステートメントの一般的な用途は、Analysis Management Objects (AMO) を使用して、戻り値のない管理機能を実行することです。 たとえば、次のコマンドはストアド プロシージャを呼び出します。

Call MyStoredProcedure(a,b,c)  

Call ステートメントでストアド プロシージャから返されるサポートされる型は、行セットのみです。 行セットのシリアル化は、XML for Analysis によって定義されます。 Call ステートメント内のストアド プロシージャが他の型を返す場合、そのストアド プロシージャは無視され、呼び出し元のアプリケーションに XML では返されません。 XML for Analysis 行セットの詳細については、「XML for Analysis Schema Rowsets」を参照してください。

ストアド プロシージャが .NET 行セットを返す場合、Analysis Services はサーバー上の結果を XML for Analysis 行セットに変換します。 XML for Analysis 行セットは、常に Call 関数のストアド プロシージャによって返されます。 XML for Analysis 行セットで表現できない特徴がデータセットに含まれている場合、エラーが発生します。

void 値を返すプロシージャ (Visual Basic のサブルーチンなど) も CALL キーワードで使用できます。 たとえば、MDX ステートメントで MyVoidFunction() 関数を使用する場合は、次の構文が使用されます。

CALL(MyVoidFunction)  

こちらもご覧ください

多次元モデル アセンブリの管理
ストアド プロシージャの定義