Benutzer geben einen Suchbegriff in ein Feld ein, und dieser Wert wird an eine gespeicherte Prozedur übergeben und mit einigen verschiedenen Feldern in der Datenbank verglichen. Diese Felder haben nicht immer den gleichen Datentyp.
Ein Feld (Telefonnummer) besteht aus allen Zahlen. Wenn Sie es aktivieren, werden alle nicht numerischen Zeichen mithilfe einer .Net CLR-Funktion aus der Zeichenfolge entfernt.
SELECT dbo.RegexReplace('(123)123-4567', '[^0-9]', '')
Das Problem ist, dass diese Funktion gelegentlich abrupt mit dem folgenden Fehler nicht mehr funktioniert:
Nachricht 6533, Ebene 16, Status 49, Zeile 2 AppDomain MyDBName.dbo [Laufzeit] .1575 wurde durch eine Eskalationsrichtlinie entladen, um sicherzustellen, dass Konsistenz Ihrer Anwendung. Beim Zugriff auf eine kritische Ressource ist nicht genügend Speicher vorhanden. System.Threading.ThreadAbortException: Ausnahme vom Typ 'System.Threading.ThreadAbortException' wurde ausgelöst. System.Threading.ThreadAbortException:
Ich habe die auf MSDN veröffentlichten Vorschläge für diesen Fehler ausprobiert, erhalte aber immer noch das Problem. Derzeit ist ein Wechsel zu einem 64-Bit-Server für uns keine Option.
Ich weiß, dass ein Neustart des Servers den darin enthaltenen Speicher freigibt, aber das ist in einer Produktionsumgebung keine praktikable Lösung.
Gibt es eine Möglichkeit, nicht numerische Zeichen in SQL Server 2005 nur mit T-SQL aus einer Zeichenfolge zu entfernen?
quelle
Ich bin ziemlich zuversichtlich in diese Lösung. Ich bin mir über die Leistung nicht sicher, aber Meinungen zu diesem Ansatz sind auf jeden Fall willkommen! Grundsätzlich gilt für jedes Zeichen in der Zeichenfolge @String, dass der ASCII-Wert des Zeichens zwischen den ASCII-Werten '0' und '9' liegt, andernfalls wird er durch ein Leerzeichen ersetzt.
quelle