CLR 使用者定義匯總 - 需求
適用於:SQL Server
Common Language Runtime (CLR) 元件中的類型可以註冊為使用者定義聚合函數,只要它實作必要的匯總合約即可。 此合約包含 SqlUserDefinedAggregate 屬性和匯總合約方法。 匯總合約包含儲存匯總中繼狀態的機制,以及累積新值的機制,其中包含四種方法: Init、 Accumulate、 Merge 和 Terminate。 當您符合這些需求時,將能夠充分利用 MICROSOFT SQL Server 中的使用者定義匯總。 本主題的下列各節提供有關如何建立和使用使用者定義匯總的其他詳細數據。 如需範例,請參閱 叫用CLR用戶定義聚合函數。
SqlUserDefinedAggregate
如需詳細資訊,請參閱 SqlUserDefinedAggregateAttribute。
匯總方法
註冊為使用者定義匯總的類別應該支援下列實例方法。 以下是查詢處理器用來計算匯總的方法:
方法 | 語法 | 描述 |
---|---|---|
Init | public void Init(); |
查詢處理器會使用這個方法來初始化匯總的計算。 這個方法會針對查詢處理器匯總的每個群組叫用一次。 查詢處理器可以選擇重複使用匯總類別的相同實例,以計算多個群組的匯總。 Init 方法應該視需要執行此實例先前使用的任何清除,並讓它重新啟動新的匯總計算。 |
積累 | public void Accumulate ( input-type value[, input-type value, ...]); |
代表函式參數的一或多個參數。 input_type應該是 MANAGED SQL Server 數據類型,相當於 CREATE AGGREGATE 語句中input_sqltype所指定的原生 SQL Server 數據類型。 如需詳細資訊,請參閱 對應CLR參數數據。 對於使用者定義型別 (UDT),輸入類型與 UDT 類型相同。 查詢處理器會使用這個方法來累積匯總值。 這會針對正在匯總的群組中的每個值叫用一次。 查詢處理器一律只會在指定匯總類別實例上呼叫 Init 方法之後呼叫這個 。 這個方法的實作應該更新 實例的狀態,以反映傳入的自變數值的累積。 |
合併 | public void Merge( udagg_class value); |
這個方法可用來合併這個匯總類別的另一個實例與目前的實例。 查詢處理器會使用這個方法來合併匯總的多個部分計算。 |
終止 | public return_type Terminate(); |
這個方法會完成匯總計算,並傳回匯總的結果。 return_type應該是Managed SQL Server資料類型,這是 CREATE AGGREGATE 語句中所指定之return_sqltype的 Managed 數據類型。 return_type也可以是使用者定義的類型。 |