Conditions requises pour les agrégats définis par l’utilisateur CLR
S'applique à :SQL Server
Un type dans un assembly CLR (Common Language Runtime) peut être enregistré comme une fonction d'agrégation définie par l'utilisateur, tant qu'il implémente le contrat d'agrégation requis. Ce contrat se compose de l’attribut SqlUserDefinedAggregate
et des méthodes de contrat d’agrégation. Le contrat d’agrégation inclut le mécanisme permettant d’enregistrer l’état intermédiaire de l’agrégation et le mécanisme d’accumulation de nouvelles valeurs, qui se composent de quatre méthodes : Init
, Accumulate
, Merge
et Terminate
. Une fois ces exigences remplies, vous pouvez tirer pleinement parti des agrégats définis par l’utilisateur dans SQL Server. Cet article fournit plus d’informations sur la création et l’utilisation d’agrégats définis par l’utilisateur. Pour obtenir un exemple, consultez Appeler des fonctions d’agrégation CLR définies par l’utilisateur.
Pour plus d’informations, consultez SqlUserDefinedAggregateAttribute.
Méthodes d’agrégation
La classe inscrite comme agrégat défini par l'utilisateur doit prendre en charge les méthodes d'instance suivantes. Le processeur de requêtes utilise les méthodes suivantes pour calculer l’agrégation.
Méthode Init
Syntaxe:
public void Init();
Le processeur de requêtes utilise cette méthode pour initialiser le calcul de l'agrégation. Cette méthode est appelée une fois pour chaque groupe dont le processeur de requêtes effectue l'agrégation. Le processeur de requêtes peut choisir de réutiliser la même instance de la classe d’agrégation pour l’informatique des agrégats de plusieurs groupes. La méthode Init
doit effectuer un nettoyage si nécessaire à partir des utilisations précédentes de cette instance et lui permettre de redémarrer un nouveau calcul d’agrégation.
Méthode d’accumulation
Syntaxe:
public void Accumulate(input-type value[, input-type value, ...]);
Un ou plusieurs paramètres représentant les paramètres de la fonction.
input_type doit être le type de données SQL Server managé équivalent au type de données SQL Server natif spécifié par input_sqltype dans l’instruction CREATE AGGREGATE
. Pour plus d’informations, consultez mapper les données de paramètres CLR.
Pour les types définis par l'utilisateur (UDT), le type d'entrée est le même que le type UDT. Le processeur de requêtes utilise cette méthode pour accumuler les valeurs d'agrégation. La méthode est appelée une fois pour chaque valeur dans le groupe qui fait l'objet de l'agrégation. Le processeur de requêtes appelle toujours cela uniquement après avoir appelé la méthode Init
sur l’instance donnée de la classe d’agrégation. L'implémentation de cette méthode doit mettre à jour l'état de l'instance pour refléter l'accumulation de la valeur d'argument qui est passée.
Méthode de fusion
Syntaxe:
public void Merge(udagg_class value);
Cette méthode peut être utilisée pour fusionner une autre instance de cette classe d'agrégation avec l'instance actuelle. Le processeur de requêtes utilise cette méthode pour fusionner plusieurs calculs partiels d'une agrégation.
Méthode Terminate
Syntaxe:
public return_type Terminate();
Cette méthode termine le calcul d'agrégation et retourne le résultat de l'agrégation. La return_type doit être un type de données SQL Server managé qui est l’équivalent managé de return_sqltype spécifié dans l’instruction CREATE AGGREGATE
. Le return_type peut également être un type défini par l’utilisateur.