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 marcá-lo, todos os caracteres não numéricos são removidos da string usando uma função .Net CLR.
SELECT dbo.RegexReplace('(123)123-4567', '[^0-9]', '')
O problema é que essa função para abruptamente para de funcionar ocasionalmente com o seguinte erro:
Msg 6533, nível 16, estado 49, linha 2 O AppDomain MyDBName.dbo [tempo de execução] .1575 foi descarregado pela política de escalação para garantir que o consistência do seu aplicativo. A 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:
Tentei as sugestões postadas no MSDN para esse erro, mas ainda estou recebendo o problema. No momento, mudar para um servidor de 64 bits não é uma opção para nós.
Sei que reiniciar o servidor libera qualquer memória que 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 seqüência de caracteres no SQL Server 2005 usando apenas T-SQL?
fonte
Estou bastante confiante nesta solução. Não tenho certeza sobre desempenho, mas qualquer opinião sobre essa abordagem é definitivamente bem-vinda! Basicamente, para cada caractere na sequência @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.
fonte