Partager via


Comment : créer et exécuter un agrégat SQL Server à l'aide de l'intégration du Common Language Runtime

Créez des agrégats SQL Server en ajoutant des éléments Agrégat aux projets de base de données du Common Language Runtime (CLR SQL) SQL Server. Une fois le déploiement effectué, les agrégats créés dans le code managé sont appelés et exécutés comme n'importe quel autre agrégat SQL Server.

Les agrégats SQL Server exigent l'implémentation de quatre méthodes spécifiques : Init, Accumulate, Merge et Terminate. Pour plus d'informations, consultez Conditions requises pour les agrégats CLR définis par l'utilisateur dans la documentation en ligne de SQL Server sur le site Web Microsoft.

Notes

Selon vos paramètres actifs ou votre édition, les boîtes de dialogue et les commandes de menu que vous voyez peuvent différer de celles qui sont décrites dans l'aide. Pour modifier vos paramètres, choisissez Importation et exportation de paramètres dans le menu Outils. Pour plus d'informations, consultez Utilisation des paramètres.

Création d'un agrégat SQL Server

Pour créer un agrégat SQL Server

  1. Ouvrez un Projet de base de données CLR SQL existant ou créez-en un. Pour plus d'informations, consultez Comment : créer un projet pour des objets de base de données qui utilisent l'intégration du Common Language Runtime SQL Server.

  2. Dans le menu Projet, cliquez sur Ajouter un nouvel élément.

  3. Dans la boîte de dialogue Ajouter un nouvel élément, sélectionnez Agrégat.

  4. Tapez un Nom pour le nouvel agrégat.

  5. Ajoutez le code à exécuter lors de l'application de l'agrégat. Consultez le premier exemple qui suit cette procédure.

  6. Déployez l'agrégat vers SQL Server. Pour plus d'informations, consultez Comment : déployer des éléments de projet de base de données CLR SQL sur un serveur SQL Server.

    Important

    SQL Server 2005 et SQL Server 2008 prennent uniquement en charge les projets SQL Server générés avec la version 2.0, 3.0 ou 3.5 de .NET Framework. Si vous essayezSQL Server de déployer un projet versSQL Server 2005 ouSQL Server 2008, une erreur s'affiche : Deploy error (SQL01268): .NET SqlClient Data Provider: Msg 6218, Level 16, State 3, Line 1 CREATE ASSEMBLY for assembly 'AssemblyName' failed because assembly 'AssemblyName' failed verification. Check if the referenced assemblies are up-to-date and trusted (for external_access or unsafe) to execute in the database (où AssemblyName est le nom de l'assembly que vous déployez). Pour plus d'informations, consultez Comment : créer un projet pour des objets de base de données qui utilisent l'intégration du Common Language Runtime SQL Server.

  7. Déboguez l'agrégat en l'exécutant sur SQL Server. Consultez le deuxième exemple qui suit cette procédure.

Exemple

Cet exemple crée un agrégat permettant de compter les voyelles. Cet agrégat compte les voyelles contenues dans une colonne de types de données String. L'agrégat contient les quatre méthodes requises suivantes, qui peuvent exécuter le multiprocessus : Init, s'accumulent, fusionnent, et se terminent.

Imports System
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server

<Serializable()>
<SqlUserDefinedAggregate(Format.Native)>
Public Structure CountVowels

    ' count only the vowels in the passed-in strings
    Private countOfVowels As SqlInt32


    Public Sub Init()
        countOfVowels = 0
    End Sub


    Public Sub Accumulate(ByVal value As SqlString)
        Dim stringChar As String
        Dim indexChar As Int32

        ' for each character in the given parameter
        For indexChar = 0 To Len(value.ToString()) - 1

            stringChar = value.ToString().Substring(indexChar, 1)

            If stringChar.ToLower() Like "[aeiou]" Then

                ' it is a vowel, increment the count
                countOfVowels = countOfVowels + 1
            End If
        Next
    End Sub


    Public Sub Merge(ByVal value As CountVowels)

        Accumulate(value.Terminate())
    End Sub


    Public Function Terminate() As SqlString

        Return countOfVowels.ToString()
    End Function
End Structure
using System;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

[Serializable]
[SqlUserDefinedAggregate(Format.Native)]
public struct CountVowels
{
    // count only the vowels in the passed-in strings
    private SqlInt32 countOfVowels;


    public void Init()
    {
        countOfVowels = 0;
    }


    public void Accumulate(SqlString value)
    {
        // list of vowels to look for
        string vowels = "aeiou";

        // for each character in the given parameter
        for (int i=0; i < value.ToString().Length; i++)
        {
            // for each character in the vowels string
            for (int j=0; j < vowels.Length; j++)
            {
                // convert parameter character to lowercase and compare to vowel
                if (value.Value.Substring(i,1).ToLower() == vowels.Substring(j,1))
                {
                    // it is a vowel, increment the count
                    countOfVowels+=1;
                }
            }
        }
    }


    public void Merge(CountVowels value)
    {
        Accumulate(value.Terminate());
    }


    public SqlString Terminate()
    {
        return countOfVowels.ToString();
    }
}

Une fois l'agrégat déployé, testez-le en l'exécutant sur SQL Server et en vérifiant que les données retournées sont correctes. Cette requête retourne un jeu de résultats du nombre de voyelles de toutes les valeurs contenues dans la colonne LastNames de la table Contact.

Notes

Si vous utilisez AdventureWorks2005, remplacez Person.Person par Person.Contact dans l'exemple de code Transact-SQL.

SELECT LastName, COUNT(LastName) AS CountOfLastName, dbo.CountVowels(LastName) AS CountOfVowels
FROM Person.Person
GROUP BY LastName
ORDER BY LastName

Voir aussi

Tâches

Comment : créer un projet pour des objets de base de données qui utilisent l'intégration du Common Language Runtime SQL Server

Comment : créer et exécuter une procédure stockée SQL Server à l'aide de l'intégration du Common Language Runtime

Comment : créer et exécuter un déclencheur SQL Server à l'aide de l'intégration du Common Language Runtime

Comment : créer et exécuter une fonction définie par l'utilisateur SQL Server à l'aide de l'intégration du Common Language Runtime

Comment : créer et exécuter un type défini par l'utilisateur SQL Server à l'aide de l'intégration du Common Language Runtime

Procédure pas à pas : création d'une procédure stockée dans le code managé

Comment : déboguer une procédure stockée SQL CLR

Référence

Attributs pour les projets de base de données CLR SQL et les objets de base de données

Concepts

Présentation de l'intégration de CLR dans SQL Server (ADO.NET)

Avantages de l'utilisation de code managé pour créer des objets de base de données

Création d'objets SQL Server dans du code managé