> Tech > CRL ou T-SQL, à  chacun sa spécialité (3)

CRL ou T-SQL, à  chacun sa spécialité (3)

Tech - Par iTPro - Publié le 24 juin 2010
email

Sur ma machine de test, le temps d’exécution de la requête a été de 53 secondes, dont deux secondes pour générer la sortie. Afin de mesurer le temps d’exécution sans générer la sortie, activez l’option Discard results after execution dans SQL Server Management Studio, sous Tools, Options, Query Results, SQL

Server, Results to Grid.

Ensuite, examinez la définition de la fonction UDF CLR fn_RegexReplace dans le code C# au niveau du bloc A du listing 3 (ou le code du bloc A du listing 4 pour l’implémentation VB). La définition simple de la fonction UDF accepte trois entrées : input (chaîne en entrée), pattern (expression régulière de modèle à trouver) et replacement (modèle de chaîne de remplacement). La fonction UDF commence par déterminer si une ou plusieurs entrées ont la valeur NULL, auquel cas elle retourne un NULL.

Si aucune valeur NULL n’est identifiée, la fonction UDF appelle simplement la fonction Regex.Replace, qui gère en interne le remplacement chaîne-modèle sur la base d’expressions régulières. Pour des raisons de simplicité, je n’ai pas inclus le code de gestion des erreurs dans les routines de cet article, même si vous le feriez dans le code de production. Une raison pour laquelle cette fonction UDF est nettement plus puissante que la fonction T-SQL est le fait qu’elle supporte les expressions régulières, lesquelles sont polyvalentes.

Malheureusement, la présentation des expressions régulières sort du cadre de cet article, mais il nous suffit de dire que cette fonction UDF peut accomplir beaucoup plus que la fonction T-SQL. Maintenant, testons la fonction en exécutant la requête suivante :
SELECT Phone,
dbo.fn_RegexReplace(Phone, N’%[^0-9a-zA-Z]%’, N ») AS CleanPhone
FROM dbo.Customers;

Cette requête s’est exécutée en moins de 3 secondes sur ma machine de test, dont deux secondes pour générer la sortie. En d’autres termes, elle a été 50 fois plus rapide que la fonction UDF T-SQL.

Procédures stockées
Alors que j’étais sur le point de développer ma propre procédure stockée CLR pour illustrer ce qu’il ne faut pas faire avec du code CLR, je suis tombé sur un exemple parfait dans la documentation en ligne SQL Server 2005. La procédure stockée interroge une table, utilise une boucle pour agréger toutes les valeurs d’une des colonnes de la table et retourne la valeur de résultat dans un paraprocédure stockée d’origine, notamment en dirigeant la requête vers notre table OrderDetails comportant 1 million de lignes et en agrégeant deux colonnes, Quantity et UnitPrice, au lieu d’une seule pour retourner les deux valeurs de résultat en tant que paramètres de sortie. Vous pouvez trouver la définition de la procédure stockée CRL usp_OrderDetailsTotals dans le bloc B du listing 3 pour le code C# (ou dans le bloc B du listing 4 pour le code VB).

Téléchargez gratuitement cette ressource

IBMi et Cloud : Table ronde Digitale

IBMi et Cloud : Table ronde Digitale

Comment faire évoluer son patrimoine IBMi en le rendant Cloud compatible ? Comment capitaliser sur des bases saines pour un avenir serein ? Faites le point et partagez l'expertise Hardis Group et IBM aux côtés de Florence Devambez, DSI d'Albingia.

Tech - Par iTPro - Publié le 24 juin 2010