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

如何从SQL数据生成单根<Units>节点的指定格式XML?

如何修正SQL语句生成正确包裹的XML格式?

你的问题出在FOR XML PATH ('UNITS')的用法上——这个参数是指定每一行数据对应的外层节点名,所以每一条UNIT记录都会被单独套一个<Units>节点,这就导致了你看到的重复根节点问题。

要生成单个<Units>根节点包裹所有<Unit>子节点的格式,有两种简单的修正方式:

方法1:嵌套子查询+外层指定根节点

把你的查询作为子查询,内层用PATH('')让所有<Unit>直接拼接,外层再用PATH('Units')生成统一的根节点:

SELECT (
    SELECT DISTINCT PA.KOD_KRESKOWY AS Unit  -- 注意别名改为Unit,匹配你期望的节点名大小写
    FROM LISTY_LINIOWE_POZ_P AS LLPP 
    INNER JOIN PACZKI AS PA ON PA.ID_PACZKI = LLPP.PACZKI_ID 
    WHERE LISTY_LINIOWE_ID = 616665 
    FOR XML PATH ('')
)
FOR XML PATH ('Units'), TYPE

方法2:使用ROOT选项更简洁

直接在原查询中用ROOT('Units')指定根节点,同时把PATH参数设为你想要的子节点名Unit:

SELECT DISTINCT PA.KOD_KRESKOWY AS Unit
FROM LISTY_LINIOWE_POZ_P AS LLPP 
INNER JOIN PACZKI AS PA ON PA.ID_PACZKI = LLPP.PACZKI_ID 
WHERE LISTY_LINIOWE_ID = 616665 
FOR XML PATH ('Unit'), ROOT('Units'), TYPE

这两种方法都会生成你期望的格式:

<Units>
  <Unit>0111024626914331</Unit>
  <Unit>0111024626914348</Unit>
  <Unit>00273129808000257576</Unit>
  <Unit>00273129808000257590</Unit>
</Units>

另外注意:如果需要严格匹配你示例中的<Unit>节点大小写,一定要把SQL里的别名从UNIT改成Unit,SQL Server会根据别名的大小写生成对应的XML节点名(取决于你的数据库排序规则是否区分大小写,不过显式指定更稳妥)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:58:38