我有一个存储过程,用于从表的JSON列中提取值:

    @ReferenceID int,
    @BureausID int,
    @EmployersID int, 
    @FileType varchar(12),
    @TargetIndex int

代码:

SELECT 
    SalesOrderJsonData.* 
FROM 
    MapHistories AS Tab
CROSS APPLY 
    OPENJSON(Tab.MapJSON, N'$.Mapping') 
        WITH 
        (
            ReferenceNumber int N'$.ReferenceNumber',
            target_field nvarchar(max) N'$.TargetField[@TargetIndex].field', 
            output_field_description nvarchar(max),
            N'$.TargetField['@TargetIndex'].output_field_description', 

我需要能够传入目标索引,因为这个JSON数组中有多个记录.我不知所措,不知道如何成功地将参数传递到json路径中.

推荐答案

您可以取出整个TargetField数组,并使用另一个带有动态路径的OPENJSON调用来解析它.

SELECT
  SalesOrderJsonData.* ,
  TargetData.*
FROM MapHistories AS Tab
CROSS APPLY OPENJSON(Tab.MapJSON, N'$.Mapping')
  WITH (
    ReferenceNumber int,
    TargetField nvarchar(max) AS JSON
  ) SalesOrderJsonData
CROSS APPLY OPENJSON(SalesOrderJsonData.TargetField, CONCAT(N'$[', @TargetIndex, N']'))
  WITH (
    target_field nvarchar(max) N'$.field', 
    output_field_description nvarchar(max)
-- etc

Json相关问答推荐

无法从JSON解析ZonedDateTime,但可以使用格式化程序很好地解析

从Postgres表中的JSON中提取值

条件性构建/修改嵌套对象数组

Vega-Lite规范:尽管在规范中提供了数据,但显示空图表

如何使用SQLite Trigger将JSON对象数组转换为新记录?

在Databricks中如何将JSON文件作为字典读取

错误解析错误:意外令牌:在我的 .eslintrc.json 文件中.为什么?

使用 jq 将非统一的 json 输出转换为汇总表

Powershell - 如何从 JSON 中删除/过滤元素但保留其余部分?

如何使用 ConfigurationBuilder 解析现有的 json 字符串(不是文件)

如何使用 jackson 反序列化为 Kotlin 集合

如何使用 Newtonsoft.Json 反序列化 JSON 数组

将 JSON 读取到 pandas 数据框 - ValueError:将 dicts 与非系列混合可能会导致排序不明确

json.dumps 打乱了顺序

为什么我不能在 C# 中引用 System.Runtime.Serialization.Json

如何在 swift 2 中获取 Alamofire.request().responseJSON 的结果值?

如何在不消除对象歧义的情况下使用 circe 解码 ADT

Java循环遍历Json数组?

Retrofit2.0 得到 MalformedJsonException 而 json 似乎正确?

你如何在 Arrays of Arrays 上 OPENJSON