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


Требования для определяемых пользователем статистических функций CLR

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

SqlUserDefinedAggregate

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

Методы статистической обработки

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

Метод

Синтаксис

Описание

Init

public void Init();

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

Accumulate

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

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

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

Merge

public void Merge( udagg_class value);

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

Terminate

public return_type Terminate();

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

Параметры, возвращающие табличные значения

Возвращающие табличное значение параметры — это определяемые пользователем табличные типы, которые передаются в процедуру или функцию, предоставляя эффективный способ передачи на сервер нескольких строк данных. Возвращающие табличное значение параметры выполняют функции, аналогичные массивам параметров, но обладают большей гибкостью и лучше интегрируются с Transact-SQL. Они также обеспечивают возможность повышения производительности. Кроме того, возвращающие табличное значение параметры способствуют сокращению циклов приема-передачи данных с сервера и на сервер. Вместо того чтобы отправлять на сервер несколько запросов (как в случае списка скалярных параметров), данные можно отправить в виде возвращающего табличное значение параметра. Определяемый пользователем табличный тип нельзя передавать в виде возвращающего табличное значение параметра в управляемую хранимую процедуру или функцию, которая выполняется в процессе SQL Server. Кроме того, такие процедуры и функции не могут возвращать определяемые пользователем табличные типы. Возвращающие табличное значение параметры также нельзя использовать внутри области контекстного соединения. Однако возвращающий табличное значение параметр можно использовать с SqlClient в управляемых хранимых процедурах или функциях, выполняемых в процессе SQL Server, если он используется в соединении, отличном от контекстного соединения. Соединение может быть установлено с тем же сервером, который выполняет управляемую процедуру или функцию. Дополнительные сведения о возвращающих табличное значение параметрах см. в разделе Возвращающие табличное значение параметры (компонент Database Engine).