用户在一个框中输入一个搜索词,该值被传递到一个存储过程,并根据数据库中的几个不同字段进行检查。这些字段并不总是具有相同的数据类型。
一个字段(电话号码)由所有数字组成,因此在检查时会使用 .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 中的字符串中去除非数字字符?
我在 SO 上发现了这个 T-SQL 函数,它可以从字符串中删除非数字字符。
这效果更好:
我对这个解决方案很有信心。我不确定性能,但绝对欢迎对这种方法提出任何意见!基本上对于字符串 @String 中的每个字符,如果字符的 ASCII 值介于 '0' 和 '9' 的 ASCII 值之间,则保留它,否则将其替换为空白。