Користувачі вводять пошуковий термін у поле, і це значення передається у збережену процедуру та перевіряється на кілька різних полів у базі даних. Ці поля не завжди мають один і той же тип даних.
Одне поле (номер телефону) складається з усіх чисел, тому при перевірці воно викреслює всі нечислові символи з рядка за допомогою функції .Net CLR.
SELECT dbo.RegexReplace('(123)123-4567', '[^0-9]', '')
Проблема полягає в тому, що ця функція різко припиняє роботу з нагоди з наступною помилкою:
Msg 6533, рівень 16, стан 49, рядок 2 AppDomain MyDBName.dbo [runtime] .1575 був завантажений політикою ескалації для забезпечення узгодженість вашої заявки. Залишилось пам'яті під час доступу до критичного ресурсу. System.Threading.ThreadAbortException: Виняток типу "System.Threading.ThreadAbortException" було кинуто. System.Threading.ThreadAbortException:
Я спробував пропозиції, розміщені на MSDN, щодо цієї помилки, але все ще отримую проблему. Наразі перехід на 64-бітний сервер - це не варіант для нас.
Я знаю, що перезапуск сервера вивільняє незалежну пам'ять, але це не є життєздатним рішенням у виробничих умовах.
Чи є спосіб зняти нечислові символи з рядка в SQL Server 2005 лише з використанням T-SQL?