CLR 使用者定義匯總的需求
適用於:SQL Server
Common Language Runtime (CLR) 元件中的類型可以註冊為使用者定義聚合函數,只要它實作必要的匯總合約即可。 此合約包含 SqlUserDefinedAggregate
屬性和匯總合約方法。 匯總合約包含儲存匯總中繼狀態的機制,以及累積新值的機制,其中包含四種方法:Init
、Accumulate
、Merge
和 Terminate
。 一旦符合這些需求,您就可以充分利用 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也可以是使用者定義的類型。