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

如何使用SQL的OPENJSON将父对象与嵌套数组关联

解决嵌套JSON数组关联父对象值的问题

你需要调整CROSS APPLY的用法,针对每个父对象的AccountIds数组单独解析,而不是重复解析整个JSON字符串。以下是正确的实现代码:

declare @data nvarchar(max)='[
    {
        "Id": "A",
        "AccountIds": [
            1
        ]
    },
    {
        "Id": "B",
        "AccountIds": [
            2,
            3
        ]
    },
    {
        "Id": "C",
        "AccountIds": [
            1,
            2
        ]
    }
]'

select
    parent.[Id],
    CAST(account.value AS INT) AS [AccountId]
from
    openjson(@data)
    with (
        [Id] nvarchar(20) '$.Id',
        [AccountIds] nvarchar(max) '$.AccountIds' AS JSON
    ) as parent
cross apply
    openjson(parent.[AccountIds]) as account

代码说明:

  • 第一步OPENJSON(@data)解析外层JSON数组,通过WITH子句读取每个对象的Id,并把AccountIds标记为JSON类型(AS JSON),这样后续可以对它进行嵌套解析。
  • CROSS APPLY openjson(parent.[AccountIds])针对每个父对象的AccountIds数组进行解析,account.value就是数组中的每个元素值,最后转成INT类型匹配预期的输出格式。

执行后会得到你想要的输出:

Id        AccountId
---------- -----------
A         1
B         2
B         3
C         1
C         2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 10:04:56