You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2019 FOR XML PATH非ASCII及特殊字符重复编码问题求解

解决方案

核心原因是你手动提前做了XML转义,而FOR XML ... TYPE本身会自动对输入的字符串内容做XML标准转义,两次转义叠加就出现了'这类不符合要求的内容。按如下步骤调整即可:

  • 第一步:删除你自定义的[dbo].[encodeXML]转义函数,所有字段直接使用原始值传入查询即可,FOR XML会自动处理&、"、<、>、'以及ä、å等非ASCII字符的转义兼容。
  • 第二步:嵌套FOR XML查询时,必须给内层查询加上TYPE关键字,让内层返回原生XML类型而非字符串类型,外层查询处理XML类型字段时不会将其当做普通字符串二次转义。

示例代码

-- 两层FOR XML嵌套的正确写法
SELECT
  WaybillNo, -- 运单号原始值
  SenderName, -- 发件人原始值
  -- 内层生成Parcel节点集合,返回XML类型
  (
    SELECT
      ParcelSN,
      ReceiverAddress, -- 地址直接放原始值,不需要手动转义
      Weight
    FROM ParcelTable p
    WHERE p.WaybillId = w.WaybillId
    FOR XML PATH('Parcel'), TYPE -- TYPE关键字必须保留
  ) AS ParcelList
FROM WaybillTable w
FOR XML PATH('Info'), TYPE -- 外层也使用TYPE保证输出格式正确

效果验证

当地址字段原始值为Quartu Sant'Elena时,最终生成的XML中对应内容为Quartu Sant&apos;Elena,不会出现二次转义问题,所有特殊字符和非ASCII字符都会按XML规范正确处理。

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:15:01