代码之家  ›  专栏  ›  技术社区  ›  WillD

从JSON文本字段中提取值以用于“in”语句SQL

  •  1
  • WillD  · 技术社区  · 3 年前

    在Azure SQL server中。我有以下(非功能性)查询,它试图使用外键的JSON数组中的值来查找行,使用“IN”。

    SELECT * FROM foo_table WHERE foo_table_id IN (SELECT json_ids_field FROM bar_table WHERE bar_table_id _field= 1);
    

    但是,这会返回一个错误,因为它无法理解中的JSON格式 json_ids_field .

    Msg 245, Level 16, State 1, Line 1
    Conversion failed when converting the nvarchar value '[29,56,57,71,138,145,195]' to data type int
    

    如何反序列化此字段,以便将其值聚合到可以在in子句中使用的列表中。

    1 回复  |  直到 3 年前
        1
  •  1
  •   Thom A    3 年前

    如评论中所述,您需要使用 OPENJSON 使用JSON并将其转换为数据集:

    SELECT *
    FROM dbo.foo_table
    WHERE foo_table_id IN (SELECT TRY_CONVERT(int, OJ.value)
                           FROM dbo.bar_table bt
                                CROSS APPLY OPENJSON(bt.json_ids_column) OJ
                           WHERE bt.bar_table_id_column = 1);