如何在SQL Server中将JSON数组属性拆分为多行结果?
在SQL Server中从JSON数组提取指定属性为多行结果
SQL Server的JSON_VALUE确实不支持数组通配符[*],JSON_QUERY也只能返回完整的JSON对象或数组,无法直接拆分数组元素为单独行。要实现你的需求,使用OPENJSON函数结合CROSS APPLY是最直接的解决方案,以下是两种可行写法:
方法一:通过OPENJSON的WITH子句直接映射属性
SELECT j.name AS Value FROM authors a CROSS APPLY OPENJSON(a.detailsColumn, '$.books') WITH ( name NVARCHAR(MAX) '$.name' -- 定义要提取的属性及对应数据类型 ) j WHERE a.id = '1234';
方法二:先拆分数组元素再提取属性
如果不需要提前定义数据类型,也可以先拆分数组得到每个元素的JSON对象,再用JSON_VALUE提取name属性:
SELECT JSON_VALUE(j.[value], '$.name') AS Value FROM authors a CROSS APPLY OPENJSON(a.detailsColumn, '$.books') j WHERE a.id = '1234';
关键说明
OPENJSON(a.detailsColumn, '$.books')会将detailsColumn中的books数组拆分为多行,每行对应一个数组元素(JSON对象)CROSS APPLY用于将authors表的每行数据与拆分后的JSON数组行关联,确保只返回目标作者对应的书籍名称- 两种方法都能将数组中的每个
name值作为结果集的单独行返回
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

