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 permettant d’accumuler de nouvelles valeurs, qui se compose de quatre méthodes : Init, Cumul, Merge et Terminate. Une fois ces conditions remplies, vous pouvez 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 du CLR User-Defined fonctions d’agrégation.

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 :

Méthode 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 toute propre 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 managé SQL Server équivalent au type de données SQL Server natif spécifié par input_sqltype dans l’instructionCREATE 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 l’appelle toujours uniquement après avoir appelé la méthode Init sur le instance donné 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 managé SQL Server 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