Comme vous le savez déjà , depuis SQL Server 2005, Microsoft a mis en place l’ utilisation du langage .NET dans SQL Server. Etudions par un simple exemple les performances ? Quand devrons-nous utiliser quand même ce SQLCLR ?
1 Etude des performances.
1.1 Matériel.
L’ étude de Rudi Bruchez sur .net avec SQL Server paru sur Developpez.com.
Un portable moyen de gamme.
Visual Studio 2008 express.
SQL Server 2005 developper.
Une table Arbre[primary key identity, NOM(varchar[25]) contenant 200 000 lignes.
1.2 Requête SQL.
La requête SQL : SELECT NOM FROM Arbre; pour 200 000 lignes Arbre N°Identity.
Durée d’ exécution sur le manager : 7 secondes.
1.3 Procédure stockée SQL.
CREATE PROCEDURE ListeNomsArbres AS SELECT NOM FROM Arbre;
GO
Durée d’ exécution sur le manager : 7 secondes.
1.3 Procédure SQLCLR.
La procédure reprend la commande SQL mais l’ encapsule dans du code .NET chargé dans l’ SQLOS de Sql Server.
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public class StoredProcedures
{
   [Microsoft.SqlServer.Server.SqlProcedure]
   public static void GetArbreFromCTIFL()
   {
       try
       {
           using (SqlConnection cn = new SqlConnection(« context connection=true »))
           {
               cn.Open();
               string sql = @ »SELECT NOM
                               FROM ARBRE »;
               SqlCommand cmd = new SqlCommand(sql, cn);
               SqlContext.Pipe.Send(cmd.ExecuteReader());
           }
       }
       catch (Exception e)
       {
           SqlPipe pipe = SqlContext.Pipe;
           pipe.Send(« erreur d’execution »);
           pipe.Send(e.Message);
           pipe.Send(e.StackTrace);
       }
   }
}
Après mise en place sur le server suivant les indication de rudib.
L’ exécution de la procédure prend 17 secondes.
Le temps d’ exécution est donc bien plus lent, le double.
2 Peux on utiliser le SQLCLR ?
D’ abord,du point de vue de SQL Server, Il suffit de créer un Assembly pointant sur le répertoire C:\ du serveur et contenant la librairie .net compilée. L’ Assembly crée, la procédure devient très simple à déclarer.
D’ après « Administrating SQL Server », le SQLCLR répond à des problématiques de communication de SQL Server avec son environnement non conventionnels ( exemple : mail, sms… )
Autre cas d’ usage du SQLCLR, les traitements algorithmiques lourds, portant sur quelques lignes, en mode pas à pas.
Autre cas d’ utilisation du SQLCLR, le calcul complexe, à partir de données que l’ on souhaite mettre à disposition dans une procédure stockée.