使用 sql 将 json 转换为 table 行
Transform json into table rows using sql
我的初始 table 看起来像这样(对象的值是动态的,所以它并不总是相同的结构):
id tags
1 {"tag1": "value1"}
2 {"tagA": "valueA", "tagB": "valueB"}
我想把它改成这样:
id tag value
1 tag1 value1
2 tagA valueA
2 tagB valueB
谁能帮我改造一下?我试过像这样使用 OPENJSON 但它只有在我按 id 过滤时才有效(而且我没有在结果中得到 id 列):
DECLARE @json NVARCHAR(MAX)
SET @json = (SELECT tags from auxTagsResources where instanceId = 1)
SELECT \[key\] as tagName, value as tagValue FROM OPENJSON(@json);
结果:
tagName tagValue
tag1 value1
您可以申请json。
create table auxTagsResources (
id int identity primary key,
instanceId int not null,
tags nvarchar(max)
);
insert into auxTagsResources (instanceId, tags) values
(1, N'{"tag1": "value1"}')
, (1, N'{"tagA": "valueA", "tagB": "valueB"}');
SELECT tag.id, j.[key] as tag, j.[value]
FROM auxTagsResources tag
CROSS APPLY OPENJSON(tag.tags) j
WHERE tag.instanceId = 1
id
tag
value
1
tag1
value1
2
tagA
valueA
2
tagB
valueB
演示 db<>fiddle here
我的初始 table 看起来像这样(对象的值是动态的,所以它并不总是相同的结构):
id tags
1 {"tag1": "value1"}
2 {"tagA": "valueA", "tagB": "valueB"}
我想把它改成这样:
id tag value
1 tag1 value1
2 tagA valueA
2 tagB valueB
谁能帮我改造一下?我试过像这样使用 OPENJSON 但它只有在我按 id 过滤时才有效(而且我没有在结果中得到 id 列):
DECLARE @json NVARCHAR(MAX)
SET @json = (SELECT tags from auxTagsResources where instanceId = 1)
SELECT \[key\] as tagName, value as tagValue FROM OPENJSON(@json);
结果:
tagName tagValue
tag1 value1
您可以申请json。
create table auxTagsResources ( id int identity primary key, instanceId int not null, tags nvarchar(max) ); insert into auxTagsResources (instanceId, tags) values (1, N'{"tag1": "value1"}') , (1, N'{"tagA": "valueA", "tagB": "valueB"}');
SELECT tag.id, j.[key] as tag, j.[value] FROM auxTagsResources tag CROSS APPLY OPENJSON(tag.tags) j WHERE tag.instanceId = 1
id | tag | value |
---|---|---|
1 | tag1 | value1 |
2 | tagA | valueA |
2 | tagB | valueB |
演示 db<>fiddle here