Common Language Runtime (CLR) 元件中的類型可以註冊為使用者定義聚合函數,只要它實作必要的匯總合約即可。 此合約包含 SqlUserDefinedAggregate 屬性和匯總合約方法。 匯總合約包含儲存匯總中繼狀態的機制,以及累積新值的機制,其中包含四種方法: Init、 Accumulate、 Merge和 Terminate。 當您符合這些需求時,將能夠充分利用 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 AGGREGATE 所指定的原生 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_type也可以是使用者定義的類型。 |
Table-Valued 參數
數據表值參數 (TVP),傳遞至程式或函式的使用者定義資料表類型,提供將多個數據列傳遞至伺服器的有效方法。 TVP 提供與參數數位類似的功能,但提供更大的彈性,並與 Transact-SQL 更緊密整合。 它們也會提供更佳效能的潛力。 TVP 也有助於減少往返伺服器的次數。 您可以將資料以TVP的形式傳送至伺服器,而不是將多個要求傳送至伺服器,例如使用純量參數清單。 使用者定義數據表類型無法當做數據表值參數傳遞至 SQL Server 進程中執行的 Managed 預存程式或函式,或從傳回。 此外,TVP 無法在內容連線的範圍內使用。 不過,如果TVP用於非內容連線的連線,則可以在SQL Server進程中執行的Managed預存程式或函式中搭配 SqlClient 使用。 線上可以是執行 Managed 程式或函式的相同伺服器。 如需 TVP 的詳細資訊,請參閱 使用 Table-Valued 參數 (Database Engine) 。
變更歷程記錄
| 更新的內容 |
|---|
更新方法的描述 Accumulate ;它現在接受多個參數。 |