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
CRL ou T-SQL, à chacun sa spécialité (3)
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 cette ressource
Préparer l’entreprise aux technologies interconnectées
Avec la « quatrième révolution industrielle », les environnements hyperconnectés entraînent de nouveaux risques en matière de sécurité. Découvrez, dans ce guide Kaspersky, comment faire face à cette nouvelle ère de vulnérabilité.
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Baromètre de la Transformation digitale 2024 en France
- Le secteur financier reste dans la ligne de mire des cyberattaquants
- CyberPatriot ®, le SOC de dernière génération de CHEOPS TECHNOLOGY
- L’IA comme levier d’évangélisation du COMEX à la cybersécurité
- Intégration et utilisation de l’IA en 3 conseils clés