Udostępnij za pośrednictwem


Wymagania dotyczące agregacji zdefiniowanych przez użytkownika środowiska CLR

Dotyczy:programu SQL Server

Typ w zestawie środowiska uruchomieniowego języka wspólnego (CLR) można zarejestrować jako funkcję agregacji zdefiniowaną przez użytkownika, o ile implementuje wymagany kontrakt agregacji. Ten kontrakt składa się z atrybutu SqlUserDefinedAggregate i metod kontraktu agregacji. Kontrakt agregacji obejmuje mechanizm zapisywania stanu pośredniego agregacji oraz mechanizm gromadzenia nowych wartości, które składają się z czterech metod: Init, Accumulate, Mergei Terminate. Po spełnieniu tych wymagań można w pełni wykorzystać agregacje zdefiniowane przez użytkownika w programie SQL Server. Ten artykuł zawiera więcej informacji na temat tworzenia i pracy z agregacjami zdefiniowanymi przez użytkownika. Aby zapoznać się z przykładem, zobacz Invoke CLR user-defined aggregate functions.

Aby uzyskać więcej informacji, zobacz SqlUserDefinedAggregateAttribute.

Metody agregacji

Klasa zarejestrowana jako agregacja zdefiniowana przez użytkownika powinna obsługiwać następujące metody wystąpienia. Procesor zapytań używa następujących metod do obliczenia agregacji.

Init, metoda

Składnia:

public void Init();

Procesor zapytań używa tej metody do inicjowania obliczeń agregacji. Ta metoda jest wywoływana raz dla każdej grupy, którą procesor zapytań agreguje. Procesor zapytań może zdecydować się na ponowne użycie tego samego wystąpienia klasy agregującej na potrzeby przetwarzania agregacji wielu grup. Metoda Init powinna wykonać czyszczenie zgodnie z potrzebami z poprzednich zastosowań tego wystąpienia i umożliwić jej ponowne uruchomienie nowego obliczenia agregowanego.

Metoda akumulowania

Składnia:

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

Co najmniej jeden parametr reprezentujący parametry funkcji. input_type powinien być zarządzanym typem danych programu SQL Server odpowiadającym natywnym typowi danych programu SQL Server określonym przez input_sqltype w instrukcji CREATE AGGREGATE. Aby uzyskać więcej informacji, zobacz mapowania danych parametrów CLR.

W przypadku typów zdefiniowanych przez użytkownika (UTS) typ wejściowy jest taki sam jak typ UDT. Procesor zapytań używa tej metody do gromadzenia zagregowanych wartości. Jest to wywoływane raz dla każdej wartości w grupie, która jest agregowana. Procesor zapytań zawsze wywołuje to tylko po wywołaniu metody Init w danym wystąpieniu klasy agregującej. Implementacja tej metody powinna zaktualizować stan wystąpienia, aby odzwierciedlić akumulację przekazywanej wartości argumentu.

Merge, metoda

Składnia:

public void Merge(udagg_class value);

Tej metody można użyć do scalenia innego wystąpienia tej zagregowanej klasy z bieżącym wystąpieniem. Procesor zapytań używa tej metody do scalania wielu częściowych obliczeń agregacji.

Metoda Terminate

Składnia:

public return_type Terminate();

Ta metoda kończy agregowanie obliczeń i zwraca wynik agregacji. return_type powinien być zarządzanym typem danych programu SQL Server, który jest zarządzanym odpowiednikiem return_sqltype określonym w instrukcji CREATE AGGREGATE. return_type może być również typem zdefiniowanym przez użytkownika.