共用方式為


CLR 使用者定義匯總的需求

適用於:SQL Server

Common Language Runtime (CLR) 元件中的類型可以註冊為使用者定義聚合函數,只要它實作必要的匯總合約即可。 此合約包含 SqlUserDefinedAggregate 屬性和匯總合約方法。 匯總合約包含儲存匯總中繼狀態的機制,以及累積新值的機制,其中包含四種方法:InitAccumulateMergeTerminate。 一旦符合這些需求,您就可以充分利用 SQL Server 中的使用者定義匯總。 本文提供有關如何建立和使用使用者定義匯總的詳細資訊。 如需範例,請參閱 叫用CLR使用者定義聚合函數

如需詳細資訊,請參閱 SqlUserDefinedAggregateAttribute

匯總方法

註冊為使用者定義匯總的類別應該支援下列實例方法。 查詢處理器會使用下列方法來計算匯總。

Init 方法

語法:

public void Init();

查詢處理器會使用這個方法來初始化匯總的計算。 這個方法會針對查詢處理器匯總的每個群組叫用一次。 查詢處理器可能會選擇重複使用匯總類別的相同實例,以計算多個群組的匯總。 Init 方法應該視先前使用此實例的用法執行任何清除,並讓它重新啟動新的匯總計算。

Accumulate 方法

語法:

public void Accumulate(input-type value[, input-type value, ...]);

代表函式參數的一或多個參數。 input_type 應該是managed SQL Server資料類型,相當於 CREATE AGGREGATE 語句中 input_sqltype 所指定的原生 SQL Server 數據類型。 如需詳細資訊,請參閱 對應 CLR 參數資料

對於使用者定義型別 (UDT),輸入類型與 UDT 類型相同。 查詢處理器會使用這個方法來累積匯總值。 這會針對正在匯總的群組中的每個值叫用一次。 查詢處理器一律只會在對匯總類別的指定實例上呼叫 Init 方法之後呼叫這個 。 這個方法的實作應該更新 實例的狀態,以反映傳入的自變數值的累積。

Merge 方法

語法:

public void Merge(udagg_class value);

這個方法可用來合併這個匯總類別的另一個實例與目前的實例。 查詢處理器會使用這個方法來合併匯總的多個部分計算。

Terminate 方法

語法:

public return_type Terminate();

這個方法會完成匯總計算,並傳回匯總的結果。 return_type 應該是Managed SQL Server數據類型,該數據類型相當於在 CREATE AGGREGATE 語句中指定的 return_sqltype return_type也可以是使用者定義的類型。