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

SQL Server 2019中JSON转SQL表行数异常问题求助

解决JSON数组转SQL表时的笛卡尔积问题

你当前的代码对每个JSON数组单独执行CROSS APPLY,导致多个数组的元素产生笛卡尔积,最终得到3×3×3×3=81行重复数据。要实现按数组索引对应取值,需要借助OPENJSON返回的key(即数组的索引位置)来关联各数组的元素。

修正后的代码

DECLARE @result NVARCHAR(MAX) = N'{"foo": [101, 202, 303], "bar": [1,2,3], "test": [10,20,30], "input": [100,200,300]}'

SELECT
    f.value AS foo,
    b.value AS bar,
    t.value AS test,
    i.value AS input
FROM 
    OPENJSON(@result, '$.foo') WITH (value INT '$', idx INT '$.key') AS f
JOIN OPENJSON(@result, '$.bar') WITH (value INT '$', idx INT '$.key') AS b ON f.idx = b.idx
JOIN OPENJSON(@result, '$.test') WITH (value INT '$', idx INT '$.key') AS t ON f.idx = t.idx
JOIN OPENJSON(@result, '$.input') WITH (value INT '$', idx INT '$.key') AS i ON f.idx = i.idx

预期结果

foobartestinput
101110100
202220200
303330300

代码说明

  • OPENJSON解析数组时,会返回每个元素的key(数组的索引,从0开始)和value(元素值)
  • 通过JOIN条件匹配各个数组的索引,确保同一位置的元素被组合成一行,避免笛卡尔积

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:33:21