L'integrazione di SQL Server 2005 con il CLR del .NET Framework permette di definire in modo programmatico tramite un linguaggio managed come C# stored procedure, trigger, UDF (User Defined Function) e UDT (User Defined Type). Questa caratteristica di SQL Server 2005 si rivela particolarmente comoda nel caso in cui sia necessario eseguire elaborazioni più o meno complesse sui tipi di dato primitivi (come le stringhe o i numeri) direttamente nel codice delle query.
Un esempio molto interessante è rappresentato dalla sostituzione delle occorrenze presenti all'interno di una stringa in base ad un'espressione regolare. In T-SQL esiste infatti unicamente la funzione REPLACE che consente la sostituzione esatta di sottostringhe all'interno di una stringa di partenza. Utilizzando la classe Regex del .NET Framework, è possibile ottenere una SqlFunction più potente, capace di operare le sostituzioni in base al controllo di espressioni regolari.
using System; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; using System.Text.RegularExpressions; // UDF che esegue la sostituzione delle occorrenze presenti // all'interno di una stringa in base ad un'espressione regolare [SqlFunction()] public static SqlString RegexReplace(SqlString input, SqlString pattern, SqlString replacement) { // Se la stringa di input è nulla, allora str1 vale string.Empty string str1 = (input.IsNull) ? string.Empty : input.Value; // Se il pattern dell'espressione regolare è nullo, allora str2 vale string.Empty string str2 = (pattern.IsNull) ? string.Empty : pattern.Value; // Se la stringa da sostituire alle occorrenze è nulla, allora str3 vale string.Empty string str3 = (replacement.IsNull) ? string.Empty : replacement.Value; // Ignora il case nella valutazione dell'espressione regolare return new SqlString(Regex.Replace(str1, str2, str3, RegexOptions.IgnoreCase)); }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.