Sdílet prostřednictvím


Požadavky na uživatelem definované agregace CLR

platí pro:SQL Server

Typ v sestavení CLR (Common Language Runtime) lze zaregistrovat jako uživatelem definovanou agregační funkci, pokud implementuje požadovaný agregační kontrakt. Tento kontrakt se skládá z atributu SqlUserDefinedAggregate a metod agregace kontraktu. Agregační kontrakt zahrnuje mechanismus pro uložení přechodného stavu agregace a mechanismus pro shromažďování nových hodnot, který se skládá ze čtyř metod: Init, Accumulate, Mergea Terminate. Jakmile tyto požadavky splníte, můžete plně využít výhod uživatelem definovaných agregací v SQL Serveru. Tento článek obsahuje další informace o vytváření a práci s agregacemi definovanými uživatelem. Příklad najdete v tématu Vyvolání uživatelem definovaných agregačních funkcí CLR.

Další informace naleznete v tématu SqlUserDefinedAggregateAttribute.

Metody agregace

Třída registrovaná jako agregace definovaná uživatelem by měla podporovat následující metody instance. Procesor dotazů používá k výpočtu agregace následující metody.

Inicializační metoda

Syntax:

public void Init();

Procesor dotazů používá tuto metodu k inicializaci výpočtu agregace. Tato metoda se vyvolá jednou pro každou skupinu, kterou procesor dotazů agreguje. Procesor dotazů se může rozhodnout znovu použít stejnou instanci agregační třídy pro výpočty agregací více skupin. Metoda Init by měla podle potřeby provést vyčištění z předchozích použití této instance a umožnit jí restartovat nový agregovaný výpočet.

Metoda Kumulovat

Syntax:

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

Jeden nebo více parametrů představujících parametry funkce. input_type by měl být spravovaný datový typ SQL Serveru, který odpovídá nativnímu datovému typu SQL Serveru určenému input_sqltype v příkazu CREATE AGGREGATE. Další informace najdete v tématu Mapování dat parametrů CLR.

U uživatelem definovaných typů (UDT) je typ vstupu stejný jako typ UDT. Procesor dotazů používá tuto metodu ke shromažďování agregovaných hodnot. To se vyvolá jednou pro každou hodnotu ve skupině, která se agreguje. Procesor dotazů to vždy volá až po volání metody Init na dané instanci agregační třídy. Implementace této metody by měla aktualizovat stav instance tak, aby odrážela akumulace hodnoty argumentu, která se předává.

Metoda Merge

Syntax:

public void Merge(udagg_class value);

Tuto metodu lze použít ke sloučení jiné instance této agregační třídy s aktuální instancí. Procesor dotazů používá tuto metodu ke sloučení více částečných výpočtů agregace.

Terminate – metoda

Syntax:

public return_type Terminate();

Tato metoda dokončí agregační výpočet a vrátí výsledek agregace. return_type by měl být spravovaný datový typ SQL Serveru, který je spravovaný ekvivalent return_sqltype zadaný v příkazu CREATE AGGREGATE. return_type může být také uživatelem definovaný typ.