如何从 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 获取多列值并交叉应用的主要内容,如果未能解决你的问题,请参考以下文章