我正在使用 SQL Server 2014,我试图从表中的数据中删除 XML 字符,并且对于大多数 XML 字符我都成功了。但我对这个字符有疑问:0xDE7B
我有一个包含 STUFF 函数的 T-SQL 语句:
SELECT DISTINCT
b.[Doc#],
STUFF((SELECT '; ' + ltrim(rtrim(a.[MyColumn]))
FROM #temp th
WHERE a.[Doc#] = b.[Doc#]
GROUP BY ltrim(rtrim(a.[MyColumn]))
FOR XML PATH (''), TYPE).value('(./text())[1]', 'varchar(max)'), 1, 2, '') [MyColumn]
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
消息 6841,级别 16,状态 1,第 547 行
FOR XML 无法序列化节点“NoName”的数据,因为它包含 XML 中不允许的字符 (0xDE7B)。要使用 FOR XML 检索此数据,请将其转换为二进制、varbinary 或图像数据类型并使用 BINARY BASE64 指令。
但是当我执行以下操作时:
REPLACE([MyColumn], CHAR(0xDE7B), '')
Run Code Online (Sandbox Code Playgroud)
这最终会将该列中的所有值清空。我有一个函数可以删除所有其他 XML 字符(即 0x0000、0x0001、0x0002...),并且它似乎对它们有效。