Mercator 10.7 offre la possibilité d'activer des fonctions CLR, çàd écrites pour l'environnement .net. L'objectif est de remplacer certaines fonctions (fonctions scalaires, fonctions tables, procédures stockées) placées automatiquement par Mercator sur la base de données, écrites en TSQL par leur version équivalente .net. L'intérêt est un gain au niveau des performances, surtout pour les fonctions très algorithmiques. En effet, TSQL est un langage interprété tandis que .net fait l'objet d'une compilation a priori.
De surcroît, ce processus permet aussi d'ajouter sur le serveur SQL des fonctionnalités qui ne sont pas programmables en TSQL mais bien en C#. Par exemple : le géocodage.
Pour activer cette possibilité, il faut se rendre dans le menu "Outils > Outils Avancés > Base de Données SQL > Activer Fonction SQL CLR". Ceci nécessite une connexion à la base de données avec des droits administrateur (login SA). Pour le reste, cette installation est tout à fait transparente. Aucun changement dans le comportement de Mercator ne sera observé.
Si on souhaite désactiver cette fonctionnalité, il suffit d'utiliser le même menu et plus précisément l'élément "Désactiver". Il est recommandé de procéder à la désactivation avant le transport éventuel de la base de données vers un autre serveur SQL.
Dans une base de données, on sait si les fonctions CLR de Mercator ont été activées en regardant, par exemple, la définition de la fonction scalaire STREXTRACT qui sera devenue :
ALTER FUNCTION [dbo].[STREXTRACT](@StrIn [nvarchar](max), @StartDelim [nvarchar](128), @EndDelim [nvarchar](128), @Occurence [int])
RETURNS [nvarchar](max) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [asmMercatorSqlClr].[MercatorSqlClr.Functions].[StrExtract]
Note : L'assembly MercatorSqlClr.dll est contenue dans Mercator et ne doit jamais être matérialisée sur disque. Elle ne peut être installée que par le processus décrit ci-dessus. Donc jamais manuellement.
Appréciation du gain de performances :
Au plus une fonction TSQL contient des parties algorithmiques (extraction de chaînes, concaténations, boucles, tests, ...), au plus le gain de performances apporté par son équivalent .net sera appréciable. Le meilleur exemple parmi celles-ci est la fonction scalaire dbo.GET_DROIT (qui établit si un utilisateur a le droit de voir une action en fonction de son ID utilisateur ou de son appartenance à un groupe). Lors de tests de performances, nous avons observé ceci pour l'extraction d'actions par le calendrier du CRM de Mercator : extraction de 8 records parmi 7000 dans la table ACTIONS
- version TSQL : 3 secondes
- version .net : instantané.
Voir aussi : Fonctions pour images sur le serveur SQL