{ color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em;}.csharpcode .lnum { color: #606060; }.csharpcode, .csharpcode pre{ font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em;}.csharpcode .lnum { color: #606060; }Agora vem uma parte legal, vamos implementar isso diretamente no SQL Server, usando a CLR do SQL Server, ou seja, a vantagem do SQL Server utilizar o .NET Framework.Para tal, vamos habilitar a execucao da CLR executando os comando a seguir no SQL Server: sp_configure 'clr', 1goRECONFIGUREgo .csharpcode, .csharpcode pre{ font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em;}.csharpcode .lnum { color: #606060; }Em seguida crie no Visual Studio um projeto para o SQL Server:Apos isso o Visual Studio pede para se conectar a base onde a CLR sera implantada:O projeto ja vem estruturado para o SQL Server e com exemplos de teste:Nesse projeto existem varias opcoes prontas para implementar muitas das funcionalidades do banco de dados. Aqui usaremos uma Function:Cada metodo que devera ser funcao tem que ser decorado com o atributo "[Microsoft.SqlServer.Server.SqlFunction]". Outro ponto importante e que e possivel trabalhar com os tipos do SQL Server. Eles sao fundamentais para receber entradas e devolver as saidas.Resta fazer os metodos que serao reconhecidas pelo SQL Server, ou seja, decoradas com o atributo citado acima. A classe final fica assim: using System.Data.SqlTypes;using System.Text.RegularExpressions;using System.Text;using System.Linq;public partial class UserDefinedFunctions{ /* para ligar o clr no sql server: sp_configure 'clr', 1 go RECONFIGURE go */ [Microsoft.SqlServer.Server.SqlFunction] public static SqlString SoundexBR(SqlString value) { StringBuilder palavras = new StringBuilder(); value = NormalizarEspacos(value); var valorNormalizado = value.ToString(); // -> Gera o Soundex de cada palavra da string valorNormalizado.Split(' ').ToList().ForEach(palavra => palavras.Append(string.Format("{0} ", GetSoundexBR(palavra)))); // -> Retorna o tipo string do SQL Server return new SqlString(palavras.ToString().Trim()); } // -> Retira espacos excedentes. [Microsoft.SqlServer.Server.SqlFunction] public static SqlString NormalizarEspacos(SqlString value) { var result = value.ToString().Trim(); while (result.Contains(" ")) result = result.Replace(" ", " "); return new SqlString(result); } // -> Recebe varias letras, separadas por virgula, para serem substituidas por uma letra especifica. private static string ReplaceMultiplo(string value, string from, string to) { var fromPattern = string.Format("({0})", string.Join(")|(", from.Split(','))).Replace(".", @"\."); return Regex.Replace(value, fromPattern, to); } private static string GetSoundexBR(string value) { value = value.ToUpper(); value = ReplaceMultiplo(value, "A,A,A,A,A", "A"); value = ReplaceMultiplo(value, "E,E,E,E", "E"); value = ReplaceMultiplo(value, "I,I,I,I", "I"); value = ReplaceMultiplo(value,