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

SQL Server 2016解析含不规则顺序元素的JSON列,获取指定字段值问题

SQL Server 2016解析含不规则顺序元素的JSON列,获取指定字段值问题

我太懂你这个烦恼了!当JSON数组里的元素顺序不固定时,用固定索引$[0]去取值肯定会踩坑——毕竟你没法保证SourceSystem每次都乖乖排在第一位对吧?

针对SQL Server 2016的版本,你可以用OPENJSON配合CROSS APPLY来解决这个问题,它能把JSON数组拆成关系型的行数据,然后我们可以通过Name字段精准筛选出想要的SourceSystem对应值。

直接上可用的SQL语句:

SELECT TOP 2
    j.Value AS SourceSystem
FROM
    RequestDetail
CROSS APPLY
    OPENJSON(RequestData)
    WITH (
        Name NVARCHAR(100) '$.Name',
        Value NVARCHAR(100) '$.Value'
    ) j
WHERE
    j.Name = 'SourceSystem'

给你拆解一下这个语句的逻辑:

  • OPENJSON(RequestData)会把每一行的JSON数组拆分成独立的行,每一行对应数组里的一个{Name:..., Value:...}对象
  • WITH子句用来把JSON对象里的Name和Value字段映射成普通的SQL列,方便后续操作
  • CROSS APPLY会把拆分后的行和原表的行关联起来
  • 最后通过WHERE j.Name = 'SourceSystem'筛选出我们需要的记录,不管它在数组里的位置是第几个,都能准确拿到对应的Value

之前你尝试的JSON_QUERY之所以没成功,是因为它的作用是返回完整的JSON对象或数组,而不是提取单个标量值,所以在这里用OPENJSON的方式更合适。

用你提供的测试数据跑这个语句,就能得到正确的结果:SSValue和SSVALUE2啦!

备注:内容来源于stack exchange,提问作者IrfanClemson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 06:59:06