我正在尝试使用OPENJSON
将json文件解析为sql。我的结构看起来像这样:
{
"definitions": {
"Event": {
"properties": {
"id": {
"type": "string",
"description": "System-generated Id"
},
"transactionDateTime": {
"type": "string",
"description": "RFC3339-compliant, system-generated timestamp"
},
"Name": {
"type": "string",
"description": "blah"
}
}
}
}
我正在尝试使用选择查询阅读type
部分中每个项目的properties
字段。
drop table if exists #temp;
SELECT * into #temp FROM OPENROWSET (BULK 'C:\swagger.json', SINGLE_CLOB) as j
CROSS APPLY OPENJSON(BulkColumn, '$.definitions.Event.properties');
select * from #temp
这会返回一个表#temp
,其中包含一个名为[key]
的列,其中包含id
,DateTime
,Name
。在名为value
的相邻列中,存在批量json数据,例如{ "type":"string", "description": "....."}
对于[key]
列中的每个项目,我想要一个带有type
的相邻列,例如string
。我想在不将[key]
字段名称硬编码到sql查询中的情况下执行此操作。
答案 0 :(得分:0)
我能够找到以下解决方案,首先使用变量导入json,然后调用OPENROWSET
来读取json。
DECLARE @json varchar(max);
SELECT @json = BulkColumn FROM OPENROWSET(BULK 'C:\swagger.json', SINGLE_CLOB) as j;
DROP TABLE if exists #temp;
SELECT value INTO #temp FROM OPENJSON(@json, '$.definitions.Event.properties')