Teilen über


Benutzerdefinierte CLR-Aggregate: Anforderungen

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 SqlUserDefinedAggregate-Attribut und den Aggregationsvertragsmethoden. Der Aggregationsvertrag enthält den Mechanismus zum Speichern des Zwischenzustands der Aggregation und den Mechanismus zum Ansammeln neuer Werte, der aus vier Methoden besteht: Init, Akkumulation, Zusammenführen und Beenden. Wenn Sie diese Anforderungen erfüllt haben, können Sie die benutzerdefinierten Aggregate in Microsoft SQL Server vollständig nutzen. Die folgenden Abschnitte zu diesem Thema enthalten zusätzliche Details zum Erstellen von benutzerdefinierten Aggregaten und ihrer Verwendungsweise. Ein Beispiel finden Sie unter Aufrufen von benutzerdefinierten CLR-Aggregatfunktionen.

SqlUserDefinedAggregate

Weitere Informationen finden Sie unter SqlUserDefinedAggregateAttribute.

Aggregationsmethoden

Die als benutzerdefiniertes Aggregat registrierte Klasse muss die folgenden Instanzmethoden unterstützen. Diese Methoden werden vom Abfrageprozessor verwendet, um die Aggregation zu berechnen:

Methode Syntax Beschreibung
Init 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 verwendet möglicherweise dieselbe Instanz der Aggregatklasse mehrfach, um Aggregate für mehrere Gruppen zu berechnen. Die Init-Methode sollte alle erforderlichen Bereinigungen aus früheren Verwendungen dieser Instanz durchführen und es ermöglichen, eine neue Aggregatberechnung neu zu starten.
Anhäufen 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 von input_sqltype in der CREATE AGGREGATE-Anweisung angegeben wird. Weitere Informationen finden Sie unter Zuordnung von 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 Aufrufen 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.
Zusammenführen 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 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.

Weitere Informationen

Benutzerdefinierte CLR-Typen
Aufrufen von benutzerdefinierten CLR-Aggregatfunktionen