使用 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