我们最近从 SQL Server 2012 迁移到 SQL Server 2014 以及我们所有的FOR XML
代码开始抛出有关不可打印 ASCII 字符的错误。
我写了这个horrible函数删除不可打印的 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)')