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

如何在SQL Server的XML结果中使Version字段显示为自闭合标签

解决方案

首先需要说明:你期望输出中的<Version="101"/>属于不合法的XML语法,正确的带属性自闭合标签格式应为<元素名 属性名="属性值"/>(比如<Version value="101"/>)。以下是符合XML规范的修改方案:

修改后的查询语句

SELECT   
    'ABC.COM' AS 'CompanyName',
    GETDATE() AS 'TimeOFGeneration',      
    'ABC' AS 'Address',
    (
        SELECT
            -- 生成带value属性的自闭合Version标签
            (SELECT 101 AS '@value' FOR XML PATH('Version'), TYPE) AS [Version],
            -- 生成带value属性的自闭合NewVersion标签
            (SELECT 101.1 AS '@value' FOR XML PATH('NewVersion'), TYPE) AS [NewVersion],
            CAST([DATE] AS DATE) AS 'LAUNCHDATE',
            '365' AS 'DURATION'
        FROM [TABLE]
        FOR XML PATH ('DATA'), TYPE , ROOT('SUBDATA')
    ) AS 'MAINDATA'
FOR XML PATH('TIMELINE')

关键修改点

  • 通过嵌套子查询结合FOR XML PATH('元素名'), TYPE的方式,生成带属性的自闭合标签,属性名通过@前缀指定;
  • 移除了原查询中的QUOTENAME函数,因为SQL Server在生成XML属性时会自动处理字符串转义,无需手动添加引号;
  • 修正了原查询中遗漏的逗号、未加方括号的保留字(DATE、TABLE)等语法错误。

生成的XML结果

<TIMELINE>
  <CompanyName>ABC.COM</CompanyName>
  <TimeOFGeneration>2023-10-18T09:09:05.540</TimeOFGeneration>
  <Address>ABC</Address>
  <MAINDATA>
    <SUBDATA>
      <DATA>
        <Version value="101"/>
        <NewVersion value="101.1"/>
        <LAUNCHDATE>2023-10-18</LAUNCHDATE>
        <DURATION>365</DURATION>
      </DATA>
    </SUBDATA>
  </MAINDATA>
</TIMELINE>

注:如果坚持要生成不符合XML规范的<Version="101"/>格式,只能通过字符串拼接生成XML,但这种方式会导致XML无法被标准解析器正常处理,不建议使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:55:13