如何仅用SQL语法在MySQL中动态填充JSON路径
动态生成JSON路径的SELECT语句实现方案
单字段动态查询
如果仅需基于元数据表中指定Sequence的字段生成JSON路径,直接通过子查询拼接路径即可,可行的SQL语句如下:
SELECT EmployeeName, JSON_VALUE(SpecialProperties, CONCAT('$.', (SELECT CustomFieldName FROM TempMetaData WHERE Sequence = 1))) AS DynamicField FROM TempBusinessData;
这段代码通过子查询获取Sequence=1对应的字段名,再用CONCAT拼接成标准JSON路径$.字段名,传入JSON_VALUE就能提取对应属性值。
多字段动态转列(全量元数据字段)
如果需要一次性将元数据表中所有字段作为列查询,由于列数是动态的,需要用动态SQL实现:
DECLARE @sql NVARCHAR(MAX); -- 拼接所有动态字段的JSON_VALUE语句 SELECT @sql = STRING_AGG( CONCAT('JSON_VALUE(SpecialProperties, ''$.', CustomFieldName, ''') AS ', QUOTENAME(CustomFieldName)), ', ' ) FROM TempMetaData ORDER BY Sequence; -- 组装完整SELECT语句 SET @sql = CONCAT('SELECT EmployeeName, ', @sql, ' FROM TempBusinessData;'); -- 执行动态SQL EXEC sp_executesql @sql;
执行后会自动生成包含所有元数据字段的查询结果,比如返回EmployeeName、FavoriteFruit、FavoriteColor、FavoriteAnimal列。
补充:你提到的Stack Overflow帖子内容翻译
原帖标题《How to populate a json array object dynamically?》核心内容:
该帖围绕SQL中动态生成JSON数组/对象的需求展开,常见解决方案包括:
- SQL Server 2017及以上版本使用
STRING_AGG拼接JSON字符串,低版本可通过FOR XML PATH实现类似效果- 结合元数据表动态构建JSON路径或键值对,搭配
JSON_QUERY、JSON_VALUE函数完成动态数据提取- 复杂场景下采用动态SQL生成完整的JSON构造语句,灵活适配元数据的变更
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

