Поделиться через


Требования к определяемым пользователем агрегатам среды CLR

Область применения:SQL Server

Тип в сборке CLR можно зарегистрировать как определяемую пользователем агрегатную функцию, если он реализует необходимую статистическую обработку. Этот контракт состоит из атрибута SqlUserDefinedAggregate и методов контракта агрегирования. Контракт агрегирования включает механизм сохранения промежуточного состояния агрегата и механизма для накапливания новых значений, состоящих из четырех методов: Init, Accumulate, Mergeи Terminate. После выполнения этих требований вы можете воспользоваться всеми преимуществами определяемых пользователем агрегатов в SQL Server. В этой статье содержатся дополнительные сведения о создании и работе с определяемыми пользователем агрегатами. Пример см. в разделе Invoke CLR, определяемые пользователем агрегатными функциями.

Дополнительные сведения см. в статье SqlUserDefinedAggregateAttribute.

Методы агрегирования

Класс, зарегистрированный как определяемая пользователем статистическая функция, должен поддерживать следующие методы экземпляра. Обработчик запросов использует следующие методы для вычисления агрегата.

Метод Init

Синтаксис:

public void Init();

Обработчик запросов использует данный метод для инициализации вычисления статистической обработки. Этот метод вызывается один раз для каждой группы, которую обработчик запросов подвергает статистической обработке. Обработчик запросов может повторно использовать один и тот же экземпляр агрегатного класса для вычислений агрегатных агрегатов нескольких групп. Метод Init должен выполнять любую очистку по мере необходимости из предыдущего использования этого экземпляра и позволить ему перезапустить новое статистическое вычисление.

Метод Аккумулирования

Синтаксис:

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

Один или несколько параметров, представляющих аргументы функции. input_type должен быть управляемым типом данных SQL Server, эквивалентным собственному типу данных SQL Server, указанному input_sqltype в инструкции CREATE AGGREGATE. Дополнительные сведения см. в данных параметров CLR.

Для определяемых пользователем типов входной тип аналогичен определяемому пользователем типу. Обработчик запросов использует этот метод для накопления статистических значений. Метод вызывается один раз для каждого значения группы, в которой выполняется статистическая обработка. Обработчик запросов всегда вызывает это только после вызова метода Init в данном экземпляре агрегатного класса. Реализация данного метода должна обновить состояние экземпляра, чтобы отразить накопление передаваемого значения аргумента.

Метод слияния

Синтаксис:

public void Merge(udagg_class value);

Метод используется для слияния еще одного экземпляра этого статистического класса с текущим экземпляром. Обработчик запросов использует этот метод для слияния нескольких частичных вычислений статистической обработки.

Метод "Завершить"

Синтаксис:

public return_type Terminate();

Этот метод завершает статистическое вычисление и возвращает результат статистической обработки. return_type должен быть управляемым типом данных SQL Server, который является управляемым эквивалентом return_sqltype, указанным в инструкции CREATE AGGREGATE. Return_type также может быть определяемым пользователем типом.