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

如何编写SQL语句从变量生成嵌套JSON结构

问题描述

我已经写出了生成单个节点的SQL语句,但不知道如何优化语句来合并两个输出结果。现有变量声明如下:

DECLARE
  @FulfillmentOrderId BIGINT = 0,    
  @NotifyCustomer BIT = 1,
  @TrackingCompany NVARCHAR(100) = '',
  @TrackingNo NVARCHAR(100) = '';

输入1

SELECT            
  @NotifyCustomer AS [notify_customer],
  @TrackingCompany AS [tracking_info.company],
  @TrackingNo AS [tracking_info.number]
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER

输出1

{
  "line_items_by_fulfillment_order": [
    {
      "fulfillment_order_id": 0
    }
  ]
}

输入2

SELECT (
  SELECT
    @FulfillmentOrderId AS [fulfillment_order_id]
  FOR JSON PATH
) AS [line_items_by_fulfillment_order]
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER

输出2

{
  "notify_customer": true,
  "tracking_info": {
    "company": "",
    "number": ""
  }
}

期望输出

{
  "fulfillment": {
    "notify_customer": true,
    "tracking_info": {
      "company": "",
      "number": 0
    },
    "line_items_by_fulfillment_order": [
      {
        "fulfillment_order_id": 0
      }
    ]
  }
}
解决方案

可以通过嵌套子查询的方式,将两个部分的JSON内容整合到fulfillment节点下,对应的SQL语句如下:

DECLARE
  @FulfillmentOrderId BIGINT = 0,    
  @NotifyCustomer BIT = 1,
  @TrackingCompany NVARCHAR(100) = '',
  @TrackingNo NVARCHAR(100) = '';

SELECT
  (
    SELECT
      @NotifyCustomer AS [notify_customer],
      @TrackingCompany AS [tracking_info.company],
      -- 注意:期望输出中number是数值0,若需要匹配,可将@TrackingNo改为0或做类型转换
      CAST(@TrackingNo AS BIGINT) AS [tracking_info.number],
      (
        SELECT @FulfillmentOrderId AS [fulfillment_order_id]
        FOR JSON PATH
      ) AS [line_items_by_fulfillment_order]
    FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
  ) AS [fulfillment]
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER

说明

  1. 内层子查询同时整合了notify_customer、tracking_info以及嵌套的line_items_by_fulfillment_order内容
  2. 外层查询将内层结果统一包装到fulfillment节点下
  3. 关于tracking_info.number:期望输出中是数值0,而原变量@TrackingNo是空字符串,可根据需求调整变量值或通过CAST转换类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:50:35