Anforderungen für benutzerdefinierte CLR-Aggregate
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 Aggregationsvertragmethoden. Der Aggregationsvertrag beinhaltet den Mechanismus zur Speicherung des Zwischenstatus der Aggregation sowie den Mechanismus zur Ansammlung neuer Werte, der sich aus den vier Methoden Init, Accumulate, Merge und Terminate zusammensetzt. Sind diese Anforderungen erfüllt, können Sie die Funktionalität der benutzerdefinierten Aggregate in Microsoft SQL Server uneingeschränkt nutzen. Die folgenden Abschnitte zu diesem Thema enthalten zusätzliche Details zum Erstellen von benutzerdefinierten Aggregaten und ihrer Verwendungsweise. Ein Beispiel hierzu finden Sie unter Aufrufen von CLR-benutzerdefinierten Aggregatfunktionen.
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 |
|
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 ggf. nach der vorherigen Verwendung dieser Instanz erforderlichen Cleanups durchführen und den erneuten Start einer weiteren Aggregatberechnung ermöglichen. |
Accumulate |
|
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 durch input_sqltype in der CREATE AGGREGATE-Anweisung angegeben ist. Weitere Informationen finden Sie unter Zuordnen 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 diese Methode stets erst nach der Init-Methode für die jeweilige Instanz der Aggregatklasse auf. Durch die Implementierung dieser Methode wird der Instanzstatus auf den momentanen Stand der übergebenen Argumentwertansammlung aktualisiert. |
Merge |
|
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 |
|
Diese Methode schließt die Aggregatberechnung ab und gibt das Ergebnis der Aggregation zurück. return_type sollte ein verwalteter SQL Server-Datentyp sein und dem verwalteten return_sqltype entsprechen, der in der CREATE AGGREGATE-Anweisung angegeben ist. Der return_type kann auch ein benutzerdefinierter Typ sein. |
Tabellenwertparameter
Tabellenwertparameter (Table Valued Parameters, TVPs), benutzerdefinierte Tabellentypen, die an eine Prozedur oder Funktion übergeben werden, bieten eine effiziente Methode zum Übergeben mehrerer Datenzeilen an den Server. TVPs verfügen über eine ähnliche Funktionalität wie Parameterarrays, bieten aber größere Flexibilität und engere Integration mit Transact-SQL. Sie besitzen auch ein besseres Leistungspotzenzial. TVPs helfen auch, die Anzahl von Roundtrips zum Server zu reduzieren. Anstatt mehrere Anforderungen an den Server zu senden, z. B. mit einer Liste von skalaren Parametern, können Daten als TVP an den Server gesendet werden. Ein benutzerdefinierter Tabellentyp kann nicht als Tabellenwertparameter an eine verwaltete gespeicherte Prozedur oder Funktion übergeben werden, die im SQL Server-Prozess ausgeführt wird, oder von einer solchen Prozedur oder Funktion zurückgegeben werden. Auch können TVPs nicht innerhalb des Bereichs einer Kontextverbindung verwendet werden. Allerdings kann ein TVP, sofern er nicht als Kontextverbindung verwendet wird, mit SqlClient in verwalteten gespeicherten Prozeduren oder Funktionen verwendet werden, die im SQL Server-Prozess ausgeführt werden. Die Verbindung kann zum gleichen Server erfolgen, der die verwaltete Prozedur oder Funktion ausführt. Weitere Informationen zu TVPs finden Sie unter Tabellenwertparameter (Datenbankmodul).
Siehe auch