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

Azure Synapse无服务器SQL中嵌套JSON元素Outcomes解析为NULL的原因

问题原因分析
  • Outcomes字段返回NULL的原因:在OPENJSON的WITH子句中,若要映射的JSON元素是数组或嵌套JSON对象,必须添加AS JSON关键字,否则SQL Server无法将数组序列化为字符串,会直接返回NULL。你的代码里Outcomes VARCHAR(MAX) '$.Outcomes'未添加该关键字,导致无法正确解析数组。
  • OutcomeId字段返回NULL的原因:Outcomes是JSON数组,$.Outcomes.OutcomeId的路径写法错误——数组元素必须通过索引(如$.Outcomes[0].OutcomeId)访问单条数据,或通过嵌套OPENJSON遍历整个数组,直接用数组路径加属性名无法获取有效值。
修正后的示例代码

方式1:获取完整Outcomes数组并遍历解析子元素

DECLARE @json VARCHAR(MAX);

SET @json = '[{"EntityId":25023,"MethodId":1,"Outcomes":[{"OutcomeId":50043,"OutcomeTypeId":1},{"OutcomeId":50044,"OutcomeTypeId":2}]}]';

SELECT 
    EntityId,
    MethodId,
    Outcomes,
    OutcomeId
FROM OPENJSON(@json) WITH (
    EntityId INT 'strict $.EntityId',
    MethodId INT '$.MethodId',
    Outcomes VARCHAR(MAX) '$.Outcomes' AS JSON  -- 添加AS JSON关键字
)
CROSS APPLY OPENJSON(Outcomes) WITH (
    OutcomeId INT '$.OutcomeId'  -- 嵌套解析数组元素
);

方式2:通过索引获取数组指定位置的元素

如果仅需数组中某一位置的OutcomeId,可使用索引路径:

DECLARE @json VARCHAR(MAX);

SET @json = '[{"EntityId":25023,"MethodId":1,"Outcomes":[{"OutcomeId":50043,"OutcomeTypeId":1},{"OutcomeId":50044,"OutcomeTypeId":2}]}]';

SELECT *
FROM OPENJSON(@json) WITH (
    EntityId INT 'strict $.EntityId',
    MethodId INT '$.MethodId',
    Outcomes VARCHAR(MAX) '$.Outcomes' AS JSON,
    FirstOutcomeId INT '$.Outcomes[0].OutcomeId',  -- 获取数组第一个元素的OutcomeId
    SecondOutcomeId INT '$.Outcomes[1].OutcomeId' -- 获取数组第二个元素的OutcomeId
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:23:15