CLR 使用者定義彙總的需求

在 Common Language Runtime (CLR) 組件中的類型只要實作需要的彙總合約,就可以註冊為使用者定義彙總函式。 此合約由 SqlUserDefinedAggregate 屬性及彙總合約方法組成。 彙總合約包括儲存彙總中繼狀態的機制,以及累積新值的機制,它是由四種方法組成:InitAccumulateMergeTerminate。 當您符合這些需求時,您將能夠充分利用 Microsoft SQL Server中的使用者定義匯總。 本主題的下列章節提供關於如何建立和使用使用者定義彙總的其他相關資訊。 如需範例,請參閱 叫用 CLR User-Defined彙總函式

SqlUserDefinedAggregate

如需詳細資訊,請參閱 SqlUserDefinedAggregateAttribute

彙總方法

註冊為使用者定義彙總的類別應該會支援下列執行個體方法。 查詢處理器用以計算彙總的方法:

方法 語法 描述
Init public void Init () ; 查詢處理器使用這個方法將彙總計算初始化。 這個方法針對查詢處理器正在彙總的每個群組叫用一次。 查詢處理器為了計算多個群組彙總,可能選擇重複使用彙總類別之相同執行個體。 Init 方法應該會視需要針對上次使用的此執行個體執行清除作業,並讓它重新啟動新的彙總計算。
Accumulate public void Accumulate ( input-type value[, input-type value, ...]) ; 代表函數參數的一個或多個參數。 input_type應該是 managed SQL Server 資料類型,相當於 語句中 CREATE AGGREGATEinput_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 AGGREGATEreturn_sqltypereturn_type也可以是使用者定義的類型。

資料表值參數

資料表值參數 (TVP) 是使用者定義資料表類型,會傳入到程序或函數中,提供有效的方式將資料的多個資料列傳遞到伺服器。 TVP 提供與參數陣列類似的功能,但提供更大的彈性,並與 Transact-SQL 更緊密整合。 它們也能夠協助您獲得更佳的效能。 TVP 也減少與伺服器之間的往返次數。 除了傳送多個要求到伺服器 (例如夾帶純量參數的清單),資料能以 TVP 的形式傳送到伺服器。 使用者定義資料表類型無法當做資料表值參數傳遞至在SQL Server進程中執行的 Managed 預存程式或函式,或從傳回。 此外,TVP 也無法在內容連接範圍內使用。 不過,如果 TVP 用於不是內容連線的連線,則可以搭配在 managed 預存程式中執行的 SqlClient 或 SQL Server函式搭配使用。 該連接可連接至執行 Managed 程序或函數的相同伺服器。 如需 TVP 的詳細資訊,請參閱 使用 Table-Valued 參數 (Database Engine)

變更記錄

更新的內容
已更新 Accumulate 方法的說明;該方法現在接受一個以上的參數。

另請參閱

CLR 使用者定義類型
叫用 CLR 使用者定義彙總函式