次の方法で共有


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

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

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

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

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

このメソッドは、保存されているクエリの副作用をインスタンス化する場合や、保存されているクエリの結果をアプリケーションが取得する場合に使用できます。 Call ステートメントは一般に、分析管理オブジェクト (AMO) を使用して、結果が返されない管理関数を実行するために使用します。 たとえば、次のコマンドはストアド プロシージャを呼び出します。

Call MyStoredProcedure(a,b,c)

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

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

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

CALL(MyVoidFunction)

関連項目

概念

多次元モデルのアセンブリの管理

ストアド プロシージャの定義