我必须生成动态 SQL 查询,以便将值从 JSON 插入到下表中。
例如:
demo_table(id, key1,key2,key3,key4,key5,value1,value2,value3,value4,value5)
json -
data = {"rows":[{"test_id":11,"score":100,"name":"test"}]}
插入语句如下所示,
insert into demo_table(key1,key2,key3,value1,value2,value3)
values
("test_id",score,"name":11,"100":"test")`
根据JSON中的元素数量,查询必须动态调整,因为最大列数是key5和value5,根据JSON元素的数量,其他列可以设置为null。
任何人对此有任何想法,我尝试了很多选择,并发现了很多错误。
任何帮助将不胜感激。
您可以将
ROW_NUMBER
与手动数据透视结合使用(使用条件聚合)。
declare @data nvarchar(max) = N'{"rows":[{"test_id":11,"score":100,"name":"test"}]}';
insert into demo_table
(key1, key2, key3, value1, value2, value3)
select
min(case when j.rn = 1 then j.[key] end),
min(case when j.rn = 2 then j.[key] end),
min(case when j.rn = 3 then j.[key] end),
min(case when j.rn = 1 then j.value end),
min(case when j.rn = 2 then j.value end),
min(case when j.rn = 3 then j.value end)
from (
select j.*,
row_number() over (order by j.[key]) as rn
from openjson(@data, '$.rows') j
) j;
我强烈建议你改变你的设计。要么为列提供正确的名称(并删除
key
列),要么标准化为行。