Anforderungen für benutzerdefinierte CLR-Aggregate
Gilt für:SQL Server
Ein Typ in einer CLR-Assembly (Common Language Runtime) kann als benutzerdefinierte Aggregatfunktion registriert werden, solange der erforderliche Aggregationsvertrag implementiert wird. Dieser Vertrag besteht aus dem attribut SqlUserDefinedAggregate
und den Aggregationsvertragsmethoden. Der Aggregationsvertrag enthält den Mechanismus zum Speichern des Zwischenzustands der Aggregation und den Mechanismus zum Ansammeln neuer Werte, die aus vier Methoden bestehen: Init
, Accumulate
, Merge
und Terminate
. Nachdem Sie diese Anforderungen erfüllt haben, können Sie die vorteile von benutzerdefinierten Aggregaten in SQL Server vollständig nutzen. Dieser Artikel enthält weitere Informationen zum Erstellen und Arbeiten mit benutzerdefinierten Aggregaten. Ein Beispiel finden Sie unter
Weitere Informationen finden Sie unter SqlUserDefinedAggregateAttribute.
Aggregationsmethoden
Die als benutzerdefiniertes Aggregat registrierte Klasse muss die folgenden Instanzmethoden unterstützen. Der Abfrageprozessor verwendet die folgenden Methoden, um die Aggregation zu berechnen.
Init-Methode
Syntax:
public void Init();
Der Abfrageprozessor verwendet diese Methode, um die Berechnung der Aggregation zu initialisieren. Diese Methode wird einmal für jede Gruppe aufgerufen, die der Abfrageprozessor aggregiert. Der Abfrageprozessor kann die gleiche Instanz der Aggregatklasse für die Berechnung von Aggregataggregaten mehrerer Gruppen wiederverwenden. Die Init
-Methode sollte alle erforderlichen Bereinigungen aus vorherigen Verwendungen dieser Instanz durchführen und es ermöglichen, eine neue Aggregatberechnung neu zu starten.
Accumulate-Methode
Syntax:
public void Accumulate(input-type value[, input-type value, ...]);
Ein oder mehrere Parameter, die die Parameter der Funktion darstellen.
input_type sollte der verwaltete SQL Server-Datentyp sein, der dem systemeigenen SQL Server-Datentyp entspricht, der in der CREATE AGGREGATE
-Anweisung durch input_sqltype angegeben wird. Weitere Informationen finden Sie unter Map CLR-Parameterdaten.
Für benutzerdefinierte Typen (User-Defined Types, UDTs) entspricht der Eingabetyp dem UDT-Typ. Der Abfrageprozessor verwendet diese Methode, um die Aggregatwerte zu sammeln. Sie wird einmal für jeden Wert in der zu aggregierenden Gruppe aufgerufen. Der Abfrageprozessor ruft dies immer erst nach dem Aufruf der Init
-Methode für die angegebene Instanz der Aggregatklasse auf. Durch die Implementierung dieser Methode wird der Instanzstatus auf den momentanen Stand der übergebenen Argumentwertansammlung aktualisiert.
Merge-Methode
Syntax:
public void Merge(udagg_class value);
Diese Methode kann verwendet werden, um eine andere Instanz dieser Aggregatklasse mit der aktuellen Instanz zusammenzuführen. Der Abfrageprozessor verwendet diese Methode, um mehrere Teilberechnungen einer Aggregation zusammenzuführen.
Terminate-Methode
Syntax:
public return_type Terminate();
Diese Methode schließt die Aggregatberechnung ab und gibt das Ergebnis der Aggregation zurück. Die return_type sollte ein verwalteter SQL Server-Datentyp sein, der die verwaltete Entsprechung von return_sqltype ist, die in der CREATE AGGREGATE
-Anweisung angegeben ist. Die return_type kann auch ein benutzerdefinierter Typ sein.