共用方式為


呼叫預存程式

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

您可以在伺服器或用戶端應用程式上呼叫預存程式。 不論是哪一種情況,預存程式一律會在伺服器上執行,不論是伺服器或資料庫的內容。 執行預存程式不需要特殊許可權。 一旦元件將預存程式新增至伺服器或資料庫內容之後,只要使用者的角色允許預存程式執行的動作,任何使用者都可以執行預存程式。

在 MDX 中呼叫預存程式的方式與呼叫內部 MDX 函式的方式相同。 對於不採用任何參數的預存程式,會使用程式名稱和空的括號組,如下所示:

MyStoredProcedure()  

如果預存程式採用一或多個參數,則會依序提供參數,並以逗號分隔。 下列範例示範具有三個參數的範例預存程式:

MyStoredProcedure("Parameter1", 2, 800)  

在 MDX 查詢中呼叫預存程式

在所有 MDX 查詢中,預存程式都必須傳回 MDX 運算式所需的語法正確型別。 如果預存程式未傳回正確的類型,就會發生 MDX 錯誤。 下列範例示範傳回集合、成員和數學運算結果的預存程式。

傳回集合

下列範例會實作會傳回集合的預存程式,稱為 MySproc。 在第一個範例中,MySproc 會直接在 SELECT 運算式中傳回集合。 在第二個範例中,MySproc 會傳回 Set 作為 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 語句的常見用法是使用 Analysis Management Objects (AMO) 來執行沒有傳回結果的管理函式。 例如,下列命令會呼叫預存程式:

Call MyStoredProcedure(a,b,c)  

Call 語句中從預存程式傳回的唯一支援類型是數據列集。 數據列集的串行化是由 XML for Analysis 所定義。 如果 Call 語句中的預存程式傳回任何其他類型,則會忽略它,而不會以 XML 傳回給呼叫端應用程式。 如需 XML for Analysis rowsets 的詳細資訊,請參閱 XML for Analysis Schema Rowsets。

如果預存程式傳回 .NET 數據列集,SQL Server Analysis Services 會將伺服器上的結果轉換成 XML for Analysis 數據列集。 xml for Analysis 數據列集一律由 Call 函式中的預存程式傳回。 如果數據集包含無法在 XML for Analysis 數據列集中表示的功能,則會產生失敗結果。

傳回 void 值的程式(例如 Visual Basic 中的子程式)也可以搭配 CALL 關鍵詞使用。 例如,如果您想要在 MDX 語句中使用 MyVoidFunction() 函式,則會採用下列語法:

CALL(MyVoidFunction)  

另請參閱

多維度模型元件管理
定義預存程式