Partager via


Agrégats CLR définis par l’utilisateur - Exigences

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 compose de quatre méthodes : Init, Accumulate, Merge et Terminate. Lorsque vous avez satisfait à ces exigences, vous pourrez tirer pleinement parti des agrégats définis par l’utilisateur dans Microsoft SQL Server. Les sections suivantes de cette rubrique fournissent des détails supplémentaires sur la façon de créer et d'utiliser les agrégats définis par l'utilisateur. Pour obtenir un exemple, consultez Appel des fonctions d’agrégation CLR définies par l’utilisateur.

SqlUserDefinedAggregate

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. Ce sont les méthodes que le processeur de requêtes utilise pour calculer l'agrégation :

Method Syntaxe Description
Init 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 calculer 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.
Accumuler 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 Mappage des données de paramètre 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.
Fusionner 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.
Terminer. public return_type Terminate(); Cette méthode termine le calcul d'agrégation et retourne le résultat de l'agrégation. Le 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.

Voir aussi

Types CLR définis par l’utilisateur
Appel de fonctions d’agrégation CLR définies par l’utilisateur