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

如何通过SQL将Orders表的OrderNumber列生成指定格式的XML输出?

正确的SQL-XML脚本

要生成你需要的XML结构,需要调整子查询的嵌套方式,确保固定的<OrgLookup>只出现一次,同时所有<OrderNumberLookup>都被正确包裹在<OrderLookups>节点下。以下是修正后的代码:

SELECT
    'ABC_INC' AS 'OrgLookup/OrgName',
    (
        SELECT OrderNumber AS 'OrderNumber'
        FROM [dbo].[Orders]
        FOR XML PATH('OrderNumberLookup'), TYPE, ROOT('OrderLookups')
    )
FOR XML PATH('OrderRequest'), TYPE

代码说明:

  1. 固定<OrgLookup>节点:通过'ABC_INC' AS 'OrgLookup/OrgName'直接构造嵌套节点,确保<OrgLookup>下包含<OrgName>子节点。
  2. <OrderLookups>与<OrderNumberLookup>嵌套:
    • 子查询从Orders表中读取所有OrderNumber,用FOR XML PATH('OrderNumberLookup')生成每个<OrderNumberLookup>节点。
    • 添加ROOT('OrderLookups')让所有订单号节点被包裹在<OrderLookups>根节点下,TYPE参数确保子查询返回的XML是正确的XML类型,而非字符串。
  3. 外层<OrderRequest>根节点:最后用FOR XML PATH('OrderRequest')将所有内容包裹在根节点中。

原代码的问题:

  • 直接从Orders表查询会导致每一行订单都生成一个<OrderRequest>节点,重复输出内容。
  • 子查询的嵌套逻辑错误,没有正确将<OrderNumberLookup>集合包裹在<OrderLookups>下,且未使用TYPE参数导致XML被转义为字符串。

示例输出(假设Orders表有1111、1112两个订单号):

<OrderRequest>
  <OrgLookup>
    <OrgName>ABC_INC</OrgName>
  </OrgLookup>
  <OrderLookups>
    <OrderNumberLookup>
      <OrderNumber>1111</OrderNumber>
    </OrderNumberLookup>
    <OrderNumberLookup>
      <OrderNumber>1112</OrderNumber>
    </OrderNumberLookup>
  </OrderLookups>
</OrderRequest>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:37:17