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.


