小编Cra*_*aig的帖子

FOR XML 无法序列化节点 NoName 的数据 - 无法替换 XML 字符

我正在使用 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...),并且它似乎对它们有效。

xml sql sql-server

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

sql ×1

sql-server ×1

xml ×1