ユーザーがボックスに検索語を入力すると、その値がストアドプロシージャに渡され、データベース内のいくつかの異なるフィールドに対してチェックされます。これらのフィールドは、常に同じデータ型であるとは限りません。
1つのフィールド(電話番号)はすべての数字で構成されているため、チェックすると、.Net CLR関数を使用して文字列からすべての非数値文字が削除されます。
SELECT dbo.RegexReplace('(123)123-4567', '[^0-9]', '')
問題は、この関数が次のエラーで突然動作を停止することです。
メッセージ6533、レベル16、状態49、行2 AppDomain MyDBName.dbo [runtime] .1575はエスカレーションポリシーによってアンロードされ、 アプリケーションの一貫性。重要なリソースへのアクセス中にメモリ不足が発生しました。 System.Threading.ThreadAbortException:タイプの例外 'System.Threading.ThreadAbortException'がスローされました。 System.Threading.ThreadAbortException:
このエラーについてMSDNに投稿された提案を試しましたが、まだ問題が発生しています。現時点では、64ビットサーバーに切り替えることはできません。
サーバーを再起動すると、サーバーが保持していたメモリが解放されることは知っていますが、本番環境では実行可能なソリューションではありません。
T-SQLのみを使用してSQL Server 2005で文字列から数値以外の文字を取り除く方法はありますか?