Vereisten voor door de gebruiker gedefinieerde CLR-aggregaties
van toepassing op:SQL Server-
Een type in een CLR-assembly (Common Language Runtime) kan worden geregistreerd als een door de gebruiker gedefinieerde statistische functie, zolang het vereiste aggregatiecontract wordt geïmplementeerd. Dit contract bestaat uit het kenmerk SqlUserDefinedAggregate
en de methoden voor het aggregatiecontract. Het aggregatiecontract bevat het mechanisme voor het opslaan van de tussenliggende toestand van de aggregatie en het mechanisme voor het verzamelen van nieuwe waarden, die bestaan uit vier methoden: Init
, Accumulate
, Merge
en Terminate
. Zodra u aan deze vereisten voldoet, kunt u optimaal profiteren van door de gebruiker gedefinieerde aggregaties in SQL Server. Dit artikel bevat meer informatie over het maken en werken met door de gebruiker gedefinieerde aggregaties. Zie voor een voorbeeld Door de gebruiker gedefinieerde statistische functies van CLR aanroepen.
Zie SqlUserDefinedAggregateAttributevoor meer informatie.
Aggregatiemethoden
De klasse die is geregistreerd als een door de gebruiker gedefinieerde aggregaties, moet de volgende exemplaarmethoden ondersteunen. De queryprocessor gebruikt de volgende methoden om de aggregatie te berekenen.
- Init-
- verzamelen
- samenvoegen
- beëindigen
Init-methode
Syntaxis:
public void Init();
De queryprocessor gebruikt deze methode om de berekening van de aggregatie te initialiseren. Deze methode wordt eenmaal aangeroepen voor elke groep die door de queryprocessor wordt samengevoegd. De queryprocessor kan ervoor kiezen om hetzelfde exemplaar van de statistische klasse opnieuw te gebruiken voor computingaggregaties van meerdere groepen. De methode Init
moet elke opschoning uitvoeren die nodig is uit eerdere toepassingen van dit exemplaar en deze inschakelen om een nieuwe statistische berekening opnieuw op te starten.
Methode verzamelen
Syntaxis:
public void Accumulate(input-type value[, input-type value, ...]);
Een of meer parameters die de parameters van de functie vertegenwoordigen.
input_type moet het beheerde SQL Server-gegevenstype zijn dat gelijk is aan het systeemeigen SQL Server-gegevenstype dat is opgegeven door input_sqltype in de CREATE AGGREGATE
-instructie. Zie Map CLR-parametergegevensvoor meer informatie.
Voor door de gebruiker gedefinieerde typen (UDT's) is het invoertype hetzelfde als het UDT-type. De queryprocessor gebruikt deze methode om de geaggregeerde waarden samen te voegen. Dit wordt eenmaal aangeroepen voor elke waarde in de groep die wordt samengevoegd. De queryprocessor roept dit altijd alleen aan nadat de Init
methode is aangeroepen voor het opgegeven exemplaar van de statistische klasse. De implementatie van deze methode moet de status van het exemplaar bijwerken om de accumulatie van de argumentwaarde weer te geven die wordt doorgegeven.
Methode samenvoegen
Syntaxis:
public void Merge(udagg_class value);
Deze methode kan worden gebruikt om een ander exemplaar van deze statistische klasse samen te voegen met het huidige exemplaar. De queryprocessor gebruikt deze methode om meerdere gedeeltelijke berekeningen van een aggregatie samen te voegen.
Beëindigingsmethode
Syntaxis:
public return_type Terminate();
Deze methode voltooit de statistische berekening en retourneert het resultaat van de aggregatie. De return_type moet een beheerd SQL Server-gegevenstype zijn dat het beheerde equivalent is van return_sqltype die zijn opgegeven in de CREATE AGGREGATE
-instructie. De return_type kan ook een door de gebruiker gedefinieerd type zijn.