sql-server – SQL Server – 删除所有不可打印的ASCII字符

前端之家收集整理的这篇文章主要介绍了sql-server – SQL Server – 删除所有不可打印的ASCII字符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们最近从sql Server 2012迁移到sql Server 2014,并且我们所有的FOR XML代码都开始抛出有关不可打印的ASCII字符的错误.
我写了这个可怕的函数删除不可打印的ASCII字符作为快速修复.我想用更干净的东西代替它.有没有办法做到这一点?
ALTER FUNCTION [dbo].[remove_non_printable_chars]
(@input_string nvarchar(max))
RETURNS nvarchar(max)
BEGIN
    RETURN
    REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
    REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
    REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
    REPLACE(REPLACE(@input_string,CHAR(1),''),CHAR(2),CHAR(3),CHAR(4),CHAR(5),CHAR(6),CHAR(7),CHAR(8),CHAR(9),CHAR(10),CHAR(11),CHAR(12),CHAR(13),CHAR(14),CHAR(15),CHAR(16),CHAR(17),CHAR(18),CHAR(19),CHAR(20),CHAR(21),CHAR(22),CHAR(23),CHAR(24),CHAR(25),CHAR(26),CHAR(27),CHAR(28),CHAR(29),CHAR(30),CHAR(31),NCHAR(0) COLLATE Latin1_General_100_BIN2,'')
END

这是打破的FOR XML代码. (我没有写这个.它已经在代码库中了).

SELECT @HTMLTableData =
(
    SELECT  HTMLRows 
    FROM (
        SELECT N'<tr>' + HTMLRow + N'</tr>' AS HTMLRows 
        FROM @HTMLRowData
    ) mi            
    FOR XML PATH(''),TYPE
).value('/','NVARCHAR(MAX)')

解决方法

另外一个选项.

功能将替换控制字符并更正任何残留的重复空格.例如,简·史密斯{13}在这里将不会像简史密斯在这里那样被归还,而是珍·史密斯在这里

CREATE FUNCTION [dbo].[udf-Str-Strip-Control](@S varchar(max))
Returns varchar(max)
Begin
    ;with  cte1(N) As (Select 1 From (Values(1),(1),(1)) N(N)),cte2(C) As (Select Top (32) Char(Row_Number() over (Order By (Select NULL))-1) From cte1 a,cte1 b)
    Select @S = Replace(@S,C,' ')
     From  cte2

    Return ltrim(rtrim(replace(replace(replace(@S,' ','†‡'),'‡†','†‡',' ')))
End
--Select [dbo].[udf-Str-Strip-Control]('Michael        '+char(13)+char(10)+'LastName')  --Returns: Michael LastName

猜你在找的MsSQL相关文章