Os usuários inserem um termo de pesquisa em uma caixa e esse valor é passado para um procedimento armazenado e verificado em alguns campos diferentes no banco de dados. Esses campos nem sempre são do mesmo tipo de dados.
Um campo (número de telefone) consiste em todos os números, portanto, ao verificar, ele remove todos os caracteres não numéricos da string usando uma função .Net CLR.
SELECT dbo.RegexReplace('(123)123-4567', '[^0-9]', '')
O problema é que esta função para de funcionar abruptamente de vez em quando com o seguinte erro:
Msg 6533, Nível 16, Estado 49, Linha 2 AppDomain MyDBName.dbo[runtime].1575 foi descarregado pela política de escalação para garantir a consistência de sua aplicação. Falta de memória ocorreu ao acessar um recurso crítico. System.Threading.ThreadAbortException: Exceção do tipo 'System.Threading.ThreadAbortException' foi lançado. System.Threading.ThreadAbortException:
Eu tentei as sugestões postadas no MSDN para esse erro, mas ainda estou recebendo o problema. Neste momento, mudar para um servidor de 64 bits não é uma opção para nós.
Eu sei que reiniciar o servidor libera qualquer memória que ele tenha, mas essa não é uma solução viável em um ambiente de produção.
Existe uma maneira de remover caracteres não numéricos de uma string no SQL Server 2005 usando apenas T-SQL?
Encontrei esta função T-SQL no SO que funciona para remover caracteres não numéricos de uma string.
Isso funciona muito melhor:
Estou bastante confiante nesta solução. Não tenho certeza sobre o desempenho, mas qualquer opinião sobre essa abordagem é definitivamente bem-vinda! Basicamente, para cada caractere na string @String, se o valor ASCII do caractere estiver entre os valores ASCII de '0' e '9', mantenha-o, caso contrário, substitua-o por um espaço em branco.