Użytkownicy wpisują wyszukiwane hasło w polu, a ta wartość jest przekazywana do procedury składowanej i sprawdzana względem kilku różnych pól w bazie danych. Te pola nie zawsze są tego samego typu danych.
Jedno pole (numer telefonu) składa się ze wszystkich cyfr, więc podczas sprawdzania usuwa wszystkie znaki nienumeryczne z ciągu za pomocą funkcji .Net CLR.
SELECT dbo.RegexReplace('(123)123-4567', '[^0-9]', '')
Problem polega na tym, że funkcja ta nagle przestaje działać z powodu następującego błędu:
Msg 6533, poziom 16, stan 49, wiersz 2 AppDomain MyDBName.dbo [środowisko wykonawcze] .1575 zostało zwolnione przez zasady eskalacji, aby zapewnić spójność twojej aplikacji. Brak dostępu wystąpił podczas uzyskiwania dostępu do zasobu krytycznego. System.Threading.ThreadAbortException: Wyjątek typu Zgłoszono „System.Threading.ThreadAbortException”. System.Threading.ThreadAbortException:
Wypróbowałem sugestie opublikowane w witrynie MSDN dotyczące tego błędu, ale nadal pojawia się problem. W tej chwili przejście na serwer 64-bitowy nie jest dla nas opcją.
Wiem, że ponowne uruchomienie serwera zwalnia posiadaną pamięć, ale nie jest to realne rozwiązanie w środowisku produkcyjnym.
Czy istnieje sposób na usunięcie znaków nienumerycznych z ciągu w SQL Server 2005 przy użyciu tylko T-SQL?
źródło
Jestem dość pewny tego rozwiązania. Nie jestem pewien co do wydajności, ale wszelkie opinie na temat tego podejścia są zdecydowanie mile widziane! Zasadniczo dla każdego znaku w ciągu @String, jeśli wartość ASCII znaku mieści się między wartościami ASCII „0” i „9”, należy go zachować, w przeciwnym razie zastąp go pustym.
źródło