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

MS SQL查询输出XML时<CustomInteger>重复标签生成问题求助

方案1:子查询独立生成CustomInteger节点

该写法直观易懂,适合固定少量自定义字段的场景:

SELECT 
    (
        SELECT '2701' AS FieldID, CAST(RegisteredHours AS INT) AS Value
        FOR XML PATH('CustomInteger'), TYPE
    ),
    (
        SELECT '2704' AS FieldID, CAST(CreditsAttempted AS INT) AS Value
        FOR XML PATH('CustomInteger'), TYPE
    ),
    (
        SELECT '2705' AS FieldID, CAST(CreditsEarned AS INT) AS Value
        FOR XML PATH('CustomInteger'), TYPE
    )
FROM Student
FOR XML PATH('CustomIntegers'), TYPE

逻辑说明:

  • 每个<CustomInteger>由单独的子查询生成,PATH('CustomInteger')指定每组FieldID和Value的外层标签,避免多个字段合并到同一个CustomInteger节点下
  • TYPE关键字保证子查询返回原生XML格式,不会被转义为普通字符串
  • 外层PATH('CustomIntegers')将所有CustomInteger节点包裹到统一父标签中

方案2:行转列后批量生成节点

该写法扩展性更强,适合自定义字段数量较多、或需要动态配置FieldID的场景:

SELECT 
    t.FieldID,
    CASE t.FieldID
        WHEN '2701' THEN CAST(s.RegisteredHours AS INT)
        WHEN '2704' THEN CAST(s.CreditsAttempted AS INT)
        WHEN '2705' THEN CAST(s.CreditsEarned AS INT)
    END AS Value
FROM Student s
CROSS JOIN (VALUES ('2701'),('2704'),('2705')) t(FieldID)
FOR XML PATH('CustomInteger'), ROOT('CustomIntegers'), TYPE

逻辑说明:

  • 通过CROSS JOIN将每个学生的一行数据扩展为3行,每行对应一个自定义字段
  • 每一行数据自动对应一个<CustomInteger>节点,直接通过PATH('CustomInteger')生成
  • ROOT('CustomIntegers')直接指定所有CustomInteger的外层父标签

如果需要在所有学生数据外层再加统一根节点,可在外层FOR XML部分增加ROOT('自定义根节点名')参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:39:03