如何从JSON的columns字段自动提取列名实现JSON转SQL表
可以实现,你可以通过SQL Server的动态SQL功能,自动读取$.table.columns下的键值对拼接查询语句,无需手动录入列名。
完整实现代码如下:
DECLARE @selectCols NVARCHAR(MAX), @withCols NVARCHAR(MAX), @sql NVARCHAR(MAX) -- 1. 自动读取columns字段生成需要拼接的列片段 SELECT @selectCols = STRING_AGG('temp.' + QUOTENAME(value), ', '), @withCols = STRING_AGG(QUOTENAME(value) + ' NVARCHAR(MAX) ''$.' + [key] + '''', ', ') FROM testdb.dbo.ezjson CROSS APPLY OPENJSON(jfile, '$.table.columns') -- 如果你需要处理指定行的JSON,可以在这里加WHERE条件过滤 -- 2. 拼接完整的查询SQL SET @sql = N' SELECT ' + @selectCols + ' FROM testdb.dbo.ezjson CROSS APPLY OPENJSON(jfile, ''$.table.rows'') WITH ( ' + @withCols + ' ) AS temp' -- 3. 执行动态SQL EXEC sp_executesql @sql
补充说明
- 这段代码会自动识别
columns下的所有字段映射关系,无论有多少列都不需要修改代码,直接执行就能输出对应列名的查询结果 - 如果你的JSON里存储的列值有特定的数据类型,可以把拼接逻辑里的
NVARCHAR(MAX)替换为对应类型的判断逻辑 - 如果需要将结果写入实体表,可以在拼接SQL的时候加上
INTO 目标表名的逻辑
如果使用的是SQL Server 2016及以下版本,不支持STRING_AGG函数,可以替换为FOR XML PATH的方式实现字符串拼接
内容的提问来源于stack exchange,提问作者apple_juice
相关产品推荐
相关产品推荐

