SQL Server 中的动态 SQL 生成

问题描述 投票:0回答:1

我必须生成动态 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。

任何人对此有任何想法,我尝试了很多选择,并发现了很多错误。

任何帮助将不胜感激。

sql sql-server t-sql
1个回答
0
投票

您可以将

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
列),要么标准化为行。

© www.soinside.com 2019 - 2024. All rights reserved.