JSON到SQL变量字符串
我正在尝试使用SQL server提取JSON文件。我可以得到第一行,但我不知道如何自动递增字符串以选择源文件中的所有值 我尝试了使用union all递归查询的while循环。问题是我无法在字符串中获取变量 以下是我的选择声明:JSON到SQL变量字符串,sql,json,sql-server,tsql,Sql,Json,Sql Server,Tsql,我正在尝试使用SQL server提取JSON文件。我可以得到第一行,但我不知道如何自动递增字符串以选择源文件中的所有值 我尝试了使用union all递归查询的while循环。问题是我无法在字符串中获取变量 以下是我的选择声明: SELECT * FROM OPENJSON (@JSONFILE, '$.series') WITH ( Series_id VARCHAR(255) '$.series_id', Name VARCHAR(255) '$.name',
SELECT *
FROM OPENJSON (@JSONFILE, '$.series')
WITH (
Series_id VARCHAR(255) '$.series_id',
Name VARCHAR(255) '$.name',
Units VARCHAR(255) '$.units',
Frequency VARCHAR(255) '$.f',
Description VARCHAR(255)'$.description',
Source VARCHAR(255) '$.source',
Country VARCHAR(255) '$.geography',
Date INT '$.data[**0**][0]',
count INT '$.data[**0**][1]'
)
SELECT
j1.Series_id,
j1.Name,
j1.Units,
j1.Frequency,
j1.Description,
j1.Source,
j1.Country,
j2.*
FROM OPENJSON(@json, '$.series') WITH (
Series_id VARCHAR(255) '$.series_id',
Name VARCHAR(255) '$.name',
Units VARCHAR(255) '$.units',
Frequency VARCHAR(255) '$.f',
Description VARCHAR(255)'$.description',
Source VARCHAR(255) '$.source',
Country VARCHAR(255) '$.geography',
data NVARCHAR(max) '$.data' AS JSON
) j1
CROSS APPLY OPENJSON(j1.data) WITH (
Date INT '$[0]',
count INT '$[1]'
) j2
粗体数字需要通过源文件自动递增,如下所示:
"series": [
{
"series_id": "PET.MCRFPUS2.M",
"name": "U.S. Field Production of Crude Oil, Monthly",
"units": "Thousand Barrels per Day",
"f": "M",
"unitsshort": "Mbbl/d",
"description": "U.S. Field Production of Crude Oil",
"copyright": "None",
"source": "EIA, U.S. Energy Information Administration",
"iso3166": "USA",
"geography": "USA",
"start": "192001",
"end": "201901",
"updated": "2019-03-29T12:45:52-0400",
"data": [
[
"201901",
11871
],
[
"201812",
11961
],
[
"201811",
11926
],
[
"201810",
11559
],
[
"201809",
11470
Select语句应自动递增“数据”Select元素您可以尝试使用以下语句。您需要在显式模式中添加
数据
列,使用作为JSON
,并使用额外的交叉应用
JSON:
SELECT语句:
SELECT *
FROM OPENJSON (@JSONFILE, '$.series')
WITH (
Series_id VARCHAR(255) '$.series_id',
Name VARCHAR(255) '$.name',
Units VARCHAR(255) '$.units',
Frequency VARCHAR(255) '$.f',
Description VARCHAR(255)'$.description',
Source VARCHAR(255) '$.source',
Country VARCHAR(255) '$.geography',
Date INT '$.data[**0**][0]',
count INT '$.data[**0**][1]'
)
SELECT
j1.Series_id,
j1.Name,
j1.Units,
j1.Frequency,
j1.Description,
j1.Source,
j1.Country,
j2.*
FROM OPENJSON(@json, '$.series') WITH (
Series_id VARCHAR(255) '$.series_id',
Name VARCHAR(255) '$.name',
Units VARCHAR(255) '$.units',
Frequency VARCHAR(255) '$.f',
Description VARCHAR(255)'$.description',
Source VARCHAR(255) '$.source',
Country VARCHAR(255) '$.geography',
data NVARCHAR(max) '$.data' AS JSON
) j1
CROSS APPLY OPENJSON(j1.data) WITH (
Date INT '$[0]',
count INT '$[1]'
) j2
输出:
Series_id Name Units Frequency Description Source Country Date count
PET.MCRFPUS2.M U.S. Field Production of Crude Oil, Monthly Thousand Barrels per Day M U.S. Field Production of Crude Oil EIA, U.S. Energy Information Administration USA 201901 11871
PET.MCRFPUS2.M U.S. Field Production of Crude Oil, Monthly Thousand Barrels per Day M U.S. Field Production of Crude Oil EIA, U.S. Energy Information Administration USA 201812 11961
PET.MCRFPUS2.M U.S. Field Production of Crude Oil, Monthly Thousand Barrels per Day M U.S. Field Production of Crude Oil EIA, U.S. Energy Information Administration USA 201811 11926
PET.MCRFPUS2.M U.S. Field Production of Crude Oil, Monthly Thousand Barrels per Day M U.S. Field Production of Crude Oil EIA, U.S. Energy Information Administration USA 201810 11559
PET.MCRFPUS2.M U.S. Field Production of Crude Oil, Monthly Thousand Barrels per Day M U.S. Field Production of Crude Oil EIA, U.S. Energy Information Administration USA 201809 11470
是否要从
数据
获取所有项目?是。我试图从数据中的每个项目中选择两个值。问题是我无法从字符串值“$.data[0][0]”中获取参数这是一个很好的解决方案,+1。