Les utilisateurs entrent un terme de recherche dans une boîte et cette valeur est transmise à une procédure stockée et vérifiée par rapport à quelques champs différents dans la base de données. Ces champs ne sont pas toujours du même type de données.
Un champ (numéro de téléphone) se compose de tous les numéros, donc lors de la vérification, il supprime tous les caractères non numériques de la chaîne à l'aide d'une fonction .Net CLR.
SELECT dbo.RegexReplace('(123)123-4567', '[^0-9]', '')
Le problème est que cette fonction cesse brusquement de fonctionner à l'occasion avec l'erreur suivante:
Msg 6533, niveau 16, état 49, ligne 2 AppDomain MyDBName.dbo [runtime] .1575 a été déchargé par la stratégie d'escalade pour garantir la cohérence de votre candidature. Une mémoire insuffisante s'est produite lors de l'accès à une ressource critique. System.Threading.ThreadAbortException: exception de type 'System.Threading.ThreadAbortException' a été levé. System.Threading.ThreadAbortException:
J'ai essayé les suggestions publiées sur MSDN pour cette erreur, mais j'obtiens toujours le problème. Pour le moment, le passage à un serveur 64 bits n'est pas une option pour nous.
Je sais que le redémarrage du serveur libère la mémoire qu'il contient, mais ce n'est pas une solution viable dans un environnement de production.
Existe-t-il un moyen de supprimer des caractères non numériques d'une chaîne dans SQL Server 2005 à l'aide de T-SQL uniquement?
la source
Je suis assez confiant dans cette solution. Je ne suis pas certain de la performance mais tout avis sur cette approche est vraiment le bienvenu! Fondamentalement, pour chaque caractère de la chaîne @String si la valeur ASCII du caractère se situe entre les valeurs ASCII de «0» et «9», conservez-la, sinon remplacez-la par un blanc.
la source