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

SQL Server 2019中解析JSON时divisionIds字段返回NULL的问题

解决SQL Server 2019中解析JSON时divisionIds返回NULL的问题

你的问题出在OPENJSON的WITH子句中,divisionIds的路径指定错误。

当你使用OPENJSON(@JsonContent, '$.conversations')时,查询上下文已经切换到conversations数组中的单个对象,因此引用该对象下的divisionIds时,应该使用相对路径'$.divisionIds',而不是带conversations的绝对路径。

另外,divisionIds是字符串数组,若想保留数组的JSON格式,建议将数据类型改为NVARCHAR(MAX)并搭配AS JSON;若需要将数组元素单独展开为多行,可结合CROSS APPLY处理。

修正后的查询(保留数组格式)

DECLARE @JsonContent NVARCHAR(MAX);
SET @JsonContent  = '
{
  "conversations": [
    {
      "originatingDirection": "inbound",
      "conversationEnd": "2021-03-18T12:39:57.587Z",
      "conversationId": "46f7cda7-ad75-4a1e-b28c-b1c8c01e609e",
      "conversationStart": "2021-03-18T12:39:01.206Z",
      "divisionIds": [
        "aaabbbba-ertw-cldl-2021-547fff22ff33",
        "ddfrgfsc-c3e4-a8f9-b28c-b1c8c01e609e"
      ]
    }
  ]
}'

SELECT * FROM
OPENJSON(@JsonContent, '$.conversations')
WITH (
  originatingDirection NVARCHAR(50) '$.originatingDirection',
  conversationEnd NVARCHAR(50) '$.conversationEnd',
  conversationId NVARCHAR(50) '$.conversationId',
  conversationStart NVARCHAR(50) '$.conversationStart',
  divisionIds NVARCHAR(MAX) '$.divisionIds' AS JSON -- 保留数组的JSON结构
)

展开数组为多行的查询

如果需要将每个divisionId单独作为一行返回,可使用以下写法:

DECLARE @JsonContent NVARCHAR(MAX);
SET @JsonContent  = '
{
  "conversations": [
    {
      "originatingDirection": "inbound",
      "conversationEnd": "2021-03-18T12:39:57.587Z",
      "conversationId": "46f7cda7-ad75-4a1e-b28c-b1c8c01e609e",
      "conversationStart": "2021-03-18T12:39:01.206Z",
      "divisionIds": [
        "aaabbbba-ertw-cldl-2021-547fff22ff33",
        "ddfrgfsc-c3e4-a8f9-b28c-b1c8c01e609e"
      ]
    }
  ]
}'

SELECT 
  conv.originatingDirection,
  conv.conversationEnd,
  conv.conversationId,
  conv.conversationStart,
  div.value AS divisionId
FROM
OPENJSON(@JsonContent, '$.conversations')
WITH (
  originatingDirection NVARCHAR(50) '$.originatingDirection',
  conversationEnd NVARCHAR(50) '$.conversationEnd',
  conversationId NVARCHAR(50) '$.conversationId',
  conversationStart NVARCHAR(50) '$.conversationStart',
  divisionIds NVARCHAR(MAX) '$.divisionIds' AS JSON
) AS conv
CROSS APPLY OPENJSON(conv.divisionIds) AS div

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:30:22