Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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, , AccumulateMergeet 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 création et l’utilisation d’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. Voici les méthodes utilisées par le processeur de requêtes pour calculer l’agrégation :
| Méthode | Syntaxe | Descriptif |
|---|---|---|
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 l’informatique des agrégats de plusieurs groupes. La Init méthode doit effectuer un nettoyage si nécessaire à partir des utilisations précédentes de cette instance et l’activer pour redémarrer un nouveau calcul d’agrégation. |
Accumulate |
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. |
Merge |
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. |
Terminate |
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. |
Paramètres table
Les paramètres table (types de tables définis par l'utilisateur et passés dans une procédure ou une fonction) offrent un moyen efficace pour passer plusieurs lignes de données au serveur. Les tvps offrent des fonctionnalités similaires aux tableaux de paramètres, mais offrent une plus grande flexibilité et une intégration plus étroite avec Transact-SQL. Ils sont également susceptibles de générer de meilleures performances. Les paramètres table aident également à réduire le nombre d'allers-retours au serveur. Au lieu d'envoyer plusieurs demandes au serveur, comme avec une liste de paramètres scalaires, les données peuvent être envoyées au serveur en tant que paramètres table. Un type de table défini par l’utilisateur ne peut pas être transmis en tant que paramètre table à une procédure stockée managée ou à une fonction exécutée dans le processus SQL Server. En outre, les adresses IP ne peuvent pas être utilisées dans l’étendue d’une connexion de contexte. Toutefois, un tvp peut être utilisé avec SqlClient dans des procédures stockées gérées ou des fonctions s’exécutant dans le processus SQL Server, s’il est utilisé dans une connexion qui n’est pas une connexion contextuelle. La connexion peut être au même serveur que celui qui exécute la procédure managée ou la fonction. Pour plus d’informations sur les tvps, consultez Utiliser les paramètres Table-Valued (moteur de base de données).
Historique des modifications
| Mise à jour du contenu |
|---|
Mise à jour de la description de la Accumulate méthode ; elle accepte désormais plusieurs paramètres. |
Voir aussi
CLR User-Defined Types
Appel de fonctions d’agrégation User-Defined CLR