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

SQL Server 2019 T-SQL生成含同名元素的XML方法问询

问题:在SQL Server 2019中生成包含同名子元素的XML结构

尝试用T-SQL创建包含两个同名<value>元素的XML,但现有方案不符合预期。

尝试的代码:

select
'A' as [Test/Route/Client/value],
'',
'B' as [Test/Route/Client/value]
for xml path('test'), type

实际得到的结果:

<test>
  <Test>
    <Route>
      <Client>
        <value>A</value>
      </Client>
    </Route>
  </Test>
  <Test>
    <Route>
      <Client>
        <value>B</value>
      </Client>
    </Route>
  </Test>
</test>

期望的结果:

<test>
  <Test>
    <Route>
      <Client>
        <value>A</value>
        <value>B</value>
      </Client>
    </Route>
  </Test>
</test>

如何实现这种类似数组的同名元素结构?


解决方案

你之前的写法中,空字符串会被当作新记录的分隔符,导致生成两个独立的<Test>节点。要在同一个<Client>下生成多个<value>元素,需要通过嵌套FOR XML PATH的方式,让同名元素归属到同一个父节点层级。

方法1:直接构造嵌套结构

SELECT
  (
    SELECT 'A' AS value, '' AS [*], 'B' AS value
    FOR XML PATH('Client'), TYPE
  ) AS [Test/Route]
FOR XML PATH('test'), TYPE

方法2:基于数据集生成(适合动态数据)

如果你的值来自表数据,可以先构造数据集再嵌套生成:

-- 模拟数据源
WITH ValueData AS (
  SELECT 'A' AS val UNION ALL SELECT 'B' AS val
)
SELECT
  (
    SELECT val AS value
    FROM ValueData
    FOR XML PATH(''), TYPE
  ) AS [Test/Route/Client]
FOR XML PATH('test'), TYPE

以上两种方法都会生成你期望的XML结构:

<test>
  <Test>
    <Route>
      <Client>
        <value>A</value>
        <value>B</value>
      </Client>
    </Route>
  </Test>
</test>

核心逻辑是通过嵌套FOR XML PATH,将多个<value>元素包裹在同一个<Client>节点下,避免因空字符串分隔产生独立的父节点层级。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:33:15