Los usuarios ingresan un término de búsqueda en un cuadro, y ese valor se pasa a un procedimiento almacenado y se compara con algunos campos diferentes en la base de datos. Estos campos no siempre son del mismo tipo de datos.
Un campo (número de teléfono) consta de todos los números, por lo que, al marcarlo, elimina todos los caracteres no numéricos de la cadena utilizando una función .Net CLR.
SELECT dbo.RegexReplace('(123)123-4567', '[^0-9]', '')
El problema es que esta función deja de funcionar abruptamente en ocasiones con el siguiente error:
Msg 6533, Nivel 16, Estado 49, Línea 2 AppDomain MyDBName.dbo [tiempo de ejecución] .1575 se descargó mediante la política de escalación para garantizar que Consistencia de su aplicación. La falta de memoria ocurrió al acceder a un recurso crítico. System.Threading.ThreadAbortException: excepción de tipo Se lanzó 'System.Threading.ThreadAbortException'. System.Threading.ThreadAbortException:
He probado las sugerencias publicadas en MSDN para este error, pero sigo teniendo el problema. En este momento, cambiar a un servidor de 64 bits no es una opción para nosotros.
Sé que reiniciar el servidor libera la memoria que haya tenido, pero esa no es una solución viable en un entorno de producción.
¿Hay alguna forma de quitar caracteres no numéricos de una cadena en SQL Server 2005 usando solo T-SQL?
fuente
Tengo bastante confianza en esta solución. No estoy seguro sobre el rendimiento, ¡pero cualquier opinión sobre este enfoque es definitivamente bienvenida! Básicamente para cada carácter en la cadena @String si el valor ASCII del carácter está entre los valores ASCII de '0' y '9', entonces manténgalo, de lo contrario reemplácelo con un espacio en blanco.
fuente