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

SQL Server 2016中JSON字符串字段提取为列的查询问题

解决JSON字段提取问题

看起来你在提取嵌套JSON字段时踩了两个常见的坑:路径层级不对和JSON键的大小写不匹配。咱们一步步来修正:

首先看你的JSON结构,它的层级是:

{
"Microsoft.Resources":{
"resourceUri":"/subscriptions/123subscription123/resourceGroups/123resourcegroup123/providers/Microsoft.Storage/storageAccounts/123storagaccount123",
"location":"euwest"
}
}

要提取的字段都嵌套在Microsoft.Resources这个顶层属性里,而且JSON是严格区分大小写的——你的JSON里是小写的location,不是你查询里写的大写Location。

方案1:直接用JSON_VALUE访问完整路径(最简单)

假设你的表中存储这个JSON的列名为JsonData,直接通过完整的JSON路径定位字段即可:

SELECT 
    JSON_VALUE(JsonData, '$.Microsoft.Resources.resourceUri') AS resourceUri,
    JSON_VALUE(JsonData, '$.Microsoft.Resources.location') AS Location
FROM YourTableName;

方案2:用OPENJSON解析嵌套对象

如果需要更灵活地处理嵌套结构,可以通过两次CROSS APPLY OPENJSON来逐层解析:

SELECT 
    res.resourceUri,
    res.location AS Location
FROM YourTableName
CROSS APPLY OPENJSON(JsonData)
WITH (
    -- 先解析顶层的Microsoft.Resources属性,把它当作JSON对象处理
    [Microsoft.Resources] NVARCHAR(MAX) AS JSON
) AS rootObj
-- 再解析内层的Microsoft.Resources对象,直接映射字段
CROSS APPLY OPENJSON(rootObj.[Microsoft.Resources])
WITH (
    resourceUri NVARCHAR(2000),
    location NVARCHAR(50)
) AS res;

你原来查询的问题点

  1. 没有指定Microsoft.Resources这个顶层节点,导致JSON_VALUE找不到对应的字段路径;
  2. JSON键大小写不匹配:你的JSON里是location,但你写的是$.Location,这会返回NULL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:05:42