共用方式為


CLR 使用者定義彙總的需求

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

SqlUserDefinedAggregate

如需詳細資訊,請參閱 SqlUserDefinedAggregateAttribute

彙總方法

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

方法

語法

說明

Init

public void Init();

查詢處理器使用這個方法將彙總計算初始化。這個方法針對查詢處理器正在彙總的每個群組叫用一次。查詢處理器為了計算多個群組彙總,可能選擇重複使用彙總類別之相同執行個體。Init 方法應該會視需要針對上次使用的此執行個體執行清除作業,並讓它重新啟動新的彙總計算。

Accumulate

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

代表函數參數的一個或多個參數。input_type 應該是 Managed SQL Server 資料類型,相當於原生的 SQL Server 資料類型,由 CREATE AGGREGATE 陳述式的 input_sqltype 所指定。如需詳細資訊,請參閱<對應 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 Managed 對應項。return_type 也可以是使用者定義型別。

資料表值參數

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

變更記錄

更新的內容

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