CLR 用户定义的聚合的要求

适用范围:SQL Server

只要公共语言运行时 (CLR) 程序集中的类型实现了所需的聚合约定,就可以将它作为用户定义聚合函数注册。 此协定由 SqlUserDefinedAggregate 属性和聚合协定方法组成。 聚合协定包括保存聚合的中间状态的机制,以及累积新值的机制,其中包括四种方法:InitAccumulateMergeTerminate。 满足这些要求后,即可充分利用 SQL Server 中的用户定义的聚合。 本文提供有关如何创建和使用用户定义的聚合的详细信息。 有关示例,请参阅 调用 CLR 用户定义的聚合函数

有关详细信息,请参阅 SqlUserDefinedAggregateAttribute

聚合方法

注册为用户定义聚合的类应支持以下实例方法。 查询处理器使用以下方法来计算聚合。

Init 方法

语法:

public void Init();

查询处理器使用此方法初始化聚合的计算。 对于查询处理器正在聚合的每个组调用此方法一次。 查询处理器可以选择重复使用聚合类的同一实例来计算多个组的聚合。 Init 方法应根据需要执行此实例之前使用的任何清理操作,并允许它重启新的聚合计算。

Accumulate 方法

语法:

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

表示该函数的参数的一个或多个参数。 input_type 应是与 CREATE AGGREGATE 语句中 input_sqltype 指定的本机 SQL Server 数据类型等效的托管 SQL Server 数据类型。 有关详细信息,请参阅 映射 CLR 参数数据

对于用户定义类型 (UDT),input-type 与 UDT 类型相同。 查询处理器使用此方法累计聚合值。 对于正在聚合的组中的每个值调用此方法一次。 查询处理器始终仅在对聚合类的给定实例调用 Init 方法后调用此方法。 此方法的实现应更新实例的状态以反映正在传递的参数值的累计。

Merge 方法

语法:

public void Merge(udagg_class value);

此方法可以将此聚合的另一实例与当前实例合并。 查询处理器使用此方法合并聚合的多个部分计算。

Terminate 方法

语法:

public return_type Terminate();

此方法完成聚合计算并返回聚合的结果。 return_type 应该是托管 SQL Server 数据类型,该数据类型与 CREATE AGGREGATE 语句中指定的 return_sqltype 的托管等效项。 return_type也可以是用户定义的类型。