CLR 用户定义聚合 - 需求
适用范围:SQL Server
只要公共语言运行时 (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应该是与 CREATE AGGREGATE 语句中input_sqltype指定的本机 SQL Server 数据类型等效的托管 SQL Server 数据类型。 有关详细信息,请参阅 映射 CLR 参数数据。 对于用户定义类型 (UDT),input-type 与 UDT 类型相同。 查询处理器使用此方法累计聚合值。 对于正在聚合的组中的每个值调用此方法一次。 查询处理器始终仅在对聚合类的给定实例调用 Init 方法后调用此方法。 此方法的实现应更新实例的状态以反映正在传递的参数值的累计。 |
合并 | public void Merge( udagg_class value); |
此方法可以将此聚合的另一实例与当前实例合并。 查询处理器使用此方法合并聚合的多个部分计算。 |
终止 | public return_type Terminate(); |
此方法完成聚合计算并返回聚合的结果。 return_type应该是托管 SQL Server 数据类型,该数据类型与 CREATE AGGREGATE 语句中指定的return_sqltype的托管等效项。 return_type也可以是用户定义的类型。 |