如何从 OPENJSON 获取多列值并交叉应用

Posted

技术标签:

【中文标题】如何从 OPENJSON 获取多列值并交叉应用【英文标题】:How to get multiple columns of values from OPENJSON and cross apply 【发布时间】:2020-04-18 01:03:16 【问题描述】:

我在 Visual Studio 2019 中使用 SQL Server。我下载了一个大型 JSON 文件 for US Zip codes。我的目标是从字段中获取所有属性,如下所示:

并将它们的属性保存在我的数据库中。

我不关心性能,因为我只想这样做一次,这样我就可以永远访问它们。到目前为止,我可以得到这个:

但它只是作为一长列出现。我试着做一些这样的选择语句:

SELECT
JSON_VALUE(v.[value],'$.fields.city')   AS City

但它带有错误的 JSON 格式文本。 如何将 JSON 文件导入我的数据库?

【问题讨论】:

如果您可以将样本以文本值发布会更容易 @Avi 文本值是什么?我发布了 JSON 值的屏幕截图,这不是您的意思吗? 如果示例数据是文本格式..人们可以复制过去并尝试他们的解决方案,否则他们也必须花时间创建示例数据 【参考方案1】:

我终于解决了。解析 JSON 并将其添加到表中的最终 SQL 如下所示:

DECLARE @ZIP VARCHAR(MAX)
SELECT @ZIP = BulkColumn FROM OPENROWSET(BULK 'D:\Downloads\us-zip-code-latitude-and-longitude.json', SINGLE_CLOB) AS j
SELECT * 
INTO ZipData
FROM OPENJSON(@ZIP)
WITH (
    City VARCHAR(255) '$.fields.city',
    Zip INT '$.fields.zip',
    DST INT '$.fields.dst',
    Longitude FLOAT '$.fields.longitude',
    State VARCHAR(255) '$.fields.state',
    Latitude FLOAT '$.fields.latitude',
    TimeZone INT '$.fields.timezone'
)

【讨论】:

以上是关于如何从 OPENJSON 获取多列值并交叉应用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用带有交叉应用的 SQL OPENJSON 函数测量 json 文件中数组内数组的长度

SSDT - 交叉应用 OPENJSON

动态 SQL 使用多列交叉应用来反透视数据

如何从exe获取返回值并重新启动它

具有从 R 到 Latex 的行和多列列名的简单交叉表

如何从 SQL Server 中的动态节点加载 OPENJSON