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

SQL Server使用OPENJSON将Discovery特殊JSON转为表头对应结构化表

解决方案

可以通过动态SQL拼接的方式实现你要的转换效果,完整可运行的实现代码如下:

DECLARE @JSON nvarchar(max) = N'[
    {
        "headings": [
            "vm_type",
            "Hostname"
            ],
        "results": [
            [
                "AWS EC2 Instance",
                null
            ],
            [
                "AWS EC2 Instance",
                null
            ]
        ]
    }
]'

DECLARE @ColNames NVARCHAR(MAX), @SQL NVARCHAR(MAX)

-- 提取所有表头字段,拼接成OPENJSON的WITH子句内容
SELECT @ColNames = STRING_AGG(QUOTENAME(value) + ' NVARCHAR(MAX) ''$[' + CAST([key] AS NVARCHAR) + ']''', ',')
FROM OPENJSON(@JSON, '$[0].headings')

-- 拼接动态查询语句
SET @SQL = N'
SELECT ' + @ColNames + N'
FROM OPENJSON(@JSON, ''$[0].results'')
WITH (
    ' + @ColNames + N'
)'

-- 执行动态SQL
EXEC sp_executesql @SQL, N'@JSON NVARCHAR(MAX)', @JSON = @JSON
实现逻辑说明
  • 首先通过OPENJSON遍历headings节点,拿到每个表头字段对应的数组下标,拼接出查询字段与results二维数组下标之间的映射规则
  • 把映射规则拼接到动态查询语句中,执行后即可直接输出headings为列名、results值按顺序匹配的结构化表
注意事项
  • 若使用SQL Server 2016版本(不支持STRING_AGG函数),可以将列名拼接部分替换为FOR XML PATH的实现方式
  • 你可以根据实际业务中字段的类型,修改拼接时的字段类型声明,不需要全用NVARCHAR(MAX)
  • 如果外层JSON数组包含多组headings+results的组合,可在外层增加遍历逻辑逐组处理

内容的提问来源于stack exchange,提问作者JY.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:45:08