次の方法で共有


ストアド プロシージャを呼び出す

適用対象: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

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

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 呼び出しステートメントを使用して、MDX クエリのコンテキストの外部で 呼び出 すことができます。

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

Call MyStoredProcedure(a,b,c)  

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

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

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

CALL(MyVoidFunction)  

参照

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