"O,O,O,O,O", "O"); value = ReplaceMultiplo(value, "U,U,U,U", "U"); value = ReplaceMultiplo(value, ".,-,", string.Empty); value = ReplaceMultiplo(value, "0,1,2,3,4,5,6,7,8,9,0", string.Empty); value = ReplaceMultiplo(value, "Y", "I"); value = ReplaceMultiplo(value, "PH", "F"); value = ReplaceMultiplo(value, "GE", "JE"); value = ReplaceMultiplo(value, "GI", "JI"); value = ReplaceMultiplo(value, "CA", "KA"); value = ReplaceMultiplo(value, "CE", "SE"); value = ReplaceMultiplo(value, "CI", "SI"); value = ReplaceMultiplo(value, "CO", "KO"); value = ReplaceMultiplo(value, "CU", "KU"); value = ReplaceMultiplo(value, "C", "S"); value = ReplaceMultiplo(value, "WAS", "WS"); value = ReplaceMultiplo(value, "WA", "VA"); value = ReplaceMultiplo(value, "WO", "VO"); value = ReplaceMultiplo(value, "WU", "VU"); value = ReplaceMultiplo(value, "WI", "UI"); // -> Depois de tratar a lingua portuguesa // Geramos o soudex padrao. value = GetSoundex(value); return value; } // -> Obtem o soudex de uma string private static string GetSoundex(string value) { value = value.ToUpper(); // -> Normaliza letras em Maiuscula var result = new StringBuilder(); foreach (char item in value) if (char.IsLetter(item)) // -> Limpa String AddCharacter(result, item); // -> Adiciona um char Soudex // -> Limpa as excecoes geradas result.Replace(".", string.Empty); // -> Arruma o tamanho no padrao soudex // 4 caracteres. FixLength(result); return result.ToString(); } // -> Preenche com 0 nos casos menor q quatro, // ou pega os 4 primeiros caracteres. private static void FixLength(StringBuilder result) { var length = result.Length; if (length < 4) result.Append(new string('0', 4 - length)); else result.Length = 4; } // -> Adiciona o caractere soudex, cuidando para nao repetir. private static void AddCharacter(StringBuilder result, char item) { if (result.Length == 0) { result.Append(item); } else { var code = GetSoundexDigit(item); if (code != result[result.Length - 1].ToString()) result.Append(code); } } // -> Algoritmo de substituicao padrao Soudex. private static string GetSoundexDigit(char item) { var charString = item.ToString(); if ("BFPV".Contains(charString)) return "1"; else if ("CGJKQSXZ".Contains(charString)) return "2"; else if ("DT".Contains(charString)) return "3"; else if ("L".Contains(charString)) return "4"; else if ("MN".Contains(charString)) return "5"; else if ("R".Contains(charString)) return "6"; else return "."; }};.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; }Pronto. Para testar coloque a chamada SQL no arquivo "Test.sql", veja:"Da o play macaco" #Cruj... E comeca o deploy no banco de dados, veja o resultado:Como podemos observar na imagem acima, o fonema e apresentado na janela de output, e como a dll ja esta instalada no SQL Server podemos testar diretamente nele:Podemos aplica-la em tabelas e views normalmente! O desempenho e muito superior comparada a uma implementacao onde os dados sao recuperados e processados por uma aplicacao externa. Codigos .NET rodando diretamente na CLR do SQL Server sao muito eficazes.O Soundex e uma dos estudos disponiveis. Existe tambem o algoritmo BuscaBR, mas esse fica para uma outra oportunidade Obrigado, abracos.