【发布时间】:2023-01-26 00:40:32
【问题描述】:
在 Azure SQL 服务器中。我有以下(非功能性)查询,它试图使用 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_ids_field 中的 JSON 格式。
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 子句中使用的列表中。
【问题讨论】:
-
您不能获取 JSON 对象并将其与
int进行比较。您需要将该 JSON 对象转换为数据集(ints)并与之进行比较。你看过OPENJSON来使用你的 JSON 数据吗? -
我研究过 OPENJSON,但它说应该使用 OPENJSON 来代替您使用表名的时间,我很挣扎,因为理论上 select 语句可以返回多行。所以我不确定如何遍历每个。
-
你根本不循环;你在
FROM中使用OPENJSON。
标签: sql json tsql azure-sql-database deserialization