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
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.
Dans le menu Projet, cliquez sur Ajouter un nouvel élément.
Dans la boîte de dialogue Ajouter un nouvel élément, sélectionnez Agrégat.
Tapez un Nom pour le nouvel agrégat.
Ajoutez le code à exécuter lors de l'application de l'agrégat. Consultez le premier exemple qui suit cette procédure.
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.
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
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