Rac*_*hel 13 sql-server-2005 sql-server t-sql
用户在一个框中输入一个搜索词,该值被传递到一个存储过程,并根据数据库中的几个不同字段进行检查。这些字段并不总是具有相同的数据类型。
一个字段(电话号码)由所有数字组成,因此在检查它时会使用 .Net CLR 函数从字符串中去除所有非数字字符。
SELECT dbo.RegexReplace('(123)123-4567', '[^0-9]', '')
Run Code Online (Sandbox Code Playgroud)
问题是,此功能有时会突然停止工作,并出现以下错误:
Msg 6533, Level 16, State 49, Line 2 AppDomain MyDBName.dbo[runtime].1575 被升级策略卸载,以确保 应用程序的一致性。访问关键资源时发生内存不足。 System.Threading.ThreadAbortException:类型异常 'System.Threading.ThreadAbortException' 被抛出。 System.Threading.ThreadAbortException:
我已经尝试了MSDN 上针对此错误发布的建议,但仍然遇到问题。目前,切换到 64 位服务器不是我们的选择。
我知道重新启动服务器会释放它拥有的任何内存,但这在生产环境中不是一个可行的解决方案。
有没有办法仅使用 T-SQL 从 SQL Server 2005 中的字符串中去除非数字字符?
Rac*_*hel 16
我在 SO 上发现了这个 T-SQL 函数,它可以从字符串中删除非数字字符。
CREATE Function [fnRemoveNonNumericCharacters](@strText VARCHAR(1000))
RETURNS VARCHAR(1000)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%', @strText) > 0
BEGIN
SET @strText = STUFF(@strText, PATINDEX('%[^0-9]%', @strText), 1, '')
END
RETURN @strText
END
Run Code Online (Sandbox Code Playgroud)
小智 5
这效果更好:
SELECT
(SELECT CAST(CAST((
SELECT SUBSTRING(FieldToStrip, Number, 1)
FROM master..spt_values
WHERE Type='p' AND Number <= LEN(FieldToStrip) AND
SUBSTRING(FieldToStrip, Number, 1) LIKE '[0-9]' FOR XML Path(''))
AS xml) AS varchar(MAX)))
FROM
SourceTable
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
81928 次 |
最近记录: |