Пользователи вводят поисковый термин в поле, и это значение передается в хранимую процедуру и проверяется по нескольким различным полям в базе данных. Эти поля не всегда имеют одинаковый тип данных.
Одно поле (номер телефона) состоит из всех чисел, поэтому при проверке оно удаляет все нечисловые символы из строки с помощью функции .Net CLR.
SELECT dbo.RegexReplace('(123)123-4567', '[^0-9]', '')
Проблема в том, что эта функция внезапно перестает работать при следующей ошибке:
Сообщение 6533, уровень 16, состояние 49, строка 2 AppDomain MyDBName.dbo [время выполнения] .1575 было выгружено политикой эскалации, чтобы обеспечить согласованность вашего приложения. При доступе к критическому ресурсу произошла нехватка памяти. System.Threading.ThreadAbortException: исключение типа «System.Threading.ThreadAbortException» было сгенерировано. System.Threading.ThreadAbortException:
Я попробовал предложения, размещенные на MSDN для этой ошибки, но все еще получаю проблему. В настоящее время переключение на 64-битный сервер для нас не вариант.
Я знаю, что перезапуск сервера освобождает любую память, которую он занимал, но это не жизнеспособное решение в производственной среде.
Есть ли способ вырезать нечисловые символы из строки в SQL Server 2005, используя только T-SQL?
источник
Я довольно уверен в этом решении. Я не уверен в производительности, но любые мнения об этом подходе, безусловно, приветствуются! В основном для каждого символа в строке @String, если значение ASCII символа находится между значениями ASCII '0' и '9', сохраните его, в противном случае замените его пустым.
источник