Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Тип в сборке CLR можно зарегистрировать как определяемую пользователем агрегатную функцию, если он реализует необходимую статистическую обработку. Этот контракт состоит из атрибута SqlUserDefinedAggregate и методов контракта агрегирования. Контракт агрегирования включает механизм сохранения промежуточного состояния агрегата и механизма для накапливания новых значений, состоящих из четырех методов: Init, AccumulateMergeи Terminate. Когда вы выполнили эти требования, вы сможете воспользоваться всеми преимуществами определяемых пользователем агрегатов в Microsoft SQL Server. В следующих разделах этого раздела содержатся дополнительные сведения о создании и работе с определяемыми пользователем агрегатами. Пример см. в разделе Вызов функций CLR User-Defined агрегатных функций.
SqlUserDefinedAggregate
Дополнительные сведения см. в статье SqlUserDefinedAggregateAttribute.
Методы агрегирования
Класс, зарегистрированный как определяемая пользователем статистическая функция, должен поддерживать следующие методы экземпляра. Это методы, которые обработчик запросов использует для вычисления агрегата:
| Метод | Синтаксис | Описание |
|---|---|---|
Init |
public void Init(); | Обработчик запросов использует данный метод для инициализации вычисления статистической обработки. Этот метод вызывается один раз для каждой группы, которую обработчик запросов подвергает статистической обработке. Обработчик запросов может повторно использовать один и тот же экземпляр агрегатного класса для вычислений агрегатных агрегатов нескольких групп. Метод Init должен выполнить любую очистку по мере необходимости из предыдущего использования этого экземпляра и позволить ему повторно запустить новое статистическое вычисление. |
Accumulate |
public void Accumulate (значение входного типа[, значение входного типа, ...]); | Один или несколько параметров, представляющих аргументы функции.
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 также может быть определяемым пользователем типом. |
параметры Table-Valued
Возвращающие табличное значение параметры — это определяемые пользователем табличные типы, которые передаются в процедуру или функцию, предоставляя эффективный способ передачи на сервер нескольких строк данных. TvPs предоставляют аналогичные функциональные возможности для массивов параметров, но обеспечивают большую гибкость и более тесную интеграцию с Transact-SQL. Они также обеспечивают возможность повышения производительности. Кроме того, возвращающие табличное значение параметры способствуют сокращению циклов приема-передачи данных с сервера и на сервер. Вместо того чтобы отправлять на сервер несколько запросов (как в случае списка скалярных параметров), данные можно отправить в виде возвращающего табличное значение параметра. Определяемый пользователем тип таблицы не может передаваться в качестве табличного параметра или возвращаться из управляемой хранимой процедуры или функции, выполняемой в процессе SQL Server. Кроме того, телевизоры нельзя использовать в области контекстного подключения. Однако TVP можно использовать с SqlClient в управляемых хранимых процедурах или функциях, выполняемых в процессе SQL Server, если оно используется в соединении, которое не является контекстным подключением. Соединение может быть с тем же сервером, который выполняет управляемую процедуру или функцию. Дополнительные сведения о tvPs см. в разделе "Использование параметров Table-Valued (ядро СУБД)".
История изменений
| Обновленное содержимое |
|---|
Обновлено описание Accumulate метода. Теперь он принимает несколько параметров. |
См. также
Типы User-Defined среды CLR
Вызов агрегатных функций СРЕДЫ CLR User-Defined