You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:18:03