呼叫預存程序
可以在伺服器上,或從用戶端應用程式呼叫預存程序。在這兩種情況下,預存程序永遠會在伺服器上執行,不論是伺服器或資料庫的內容。執行預存程序並不需要特殊的權限。組件將預存程序加入到伺服器或資料庫內容後,任何使用者都可以執行預存程序,只要使用者的角色允許該預存程序執行的動作。
在 MDX 中呼叫預存程序,與呼叫內建 MDX 函數的方式相同。對於未採用參數的預存程序,則會使用程序名稱和空白的成對括號,如此處所示:
MyStoredProcedure()
如果預存程序有一或多個參數,則依序提供以逗號分隔的參數。下例展示具有三個參數的預存程序範例:
MyStoredProcedure("Parameter1", 2, 800)
在 MDX 查詢中呼叫預存程序
在所有 MDX 查詢中,預存程序必須傳回 MDX 運算式所需的句法正確類型。如果預存程序沒有傳回正確類型,就會發生 MDX 錯誤。下列範例展示的預存程序會傳回數學運算的集合、成員和結果。
傳回集合
下列範例實作名稱為 MySproc 的預存程序,它會傳回一個集合。在第一個範例中,MySproc 會在 SELECT 運算式中直接傳回集合。其次的兩個範例中,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 for Analysis 定義的。如果 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)