【问题标题】:Fetch data from Json array in rows and columns从行和列中的 Json 数组中获取数据
【发布时间】:2020-02-19 10:47:12
【问题描述】:

我有这个查询以在 JSON 中附加数组:

DECLARE @TheTable table(TheJSON nvarchar(max), Condition int )
DECLARE @mystring nvarchar(100)='{"id": 3, "name": "Three"}'

INSERT INTO @TheTable SELECT '[{"id": 1, "name": "One"}, {"id": 2, "name": "Two"}]', 1

UPDATE @TheTable 
SET TheJSON = JSON_MODIFY(TheJSON, 'append $', JSON_QUERY(N'{"id": 3, "name": "Three"}')) 
WHERE Condition = 1;

SELECT TheJSON FROM @TheTable

它给了我 1 个单行的输出:

[{"id": 1, "name": "One"}, {"id": 2, "name": "Two"},{"id": 3, "name": "Three"}]

直到这部分它是正确的。

现在我想像普通表一样从该表中按行和列获取数据:

ID  Name    
1   One 
2   Two 
3   Three

如何以行列方式从 Json 中获取数据?

任何帮助将不胜感激

【问题讨论】:

标签: sql json sql-server


【解决方案1】:
DECLARE @TheTable table(TheJSON nvarchar(max), Condition int )
DECLARE @mystring nvarchar(100)='{"id": 3, "name": "Three"}'

INSERT INTO @TheTable SELECT '[{"id": 1, "name": "One"}, {"id": 2, "name": "Two"}]', 1

UPDATE @TheTable 
SET TheJSON = JSON_MODIFY(TheJSON, 'append $', JSON_QUERY(N'{"id": 3, "name": "Three"}')) 
WHERE Condition = 1;

SELECT @mystring =  TheJSON FROM @TheTable

SELECT  p.*
    FROM 
    OPENJSON (@mystring, '$') WITH(id varchar(10) '$.id', name varchar (30) '$.name') p

【讨论】:

    【解决方案2】:
    DECLARE @mystring nvarchar(100)='{"id": 3, "name": "Three"}'
    
    INSERT INTO @TheTable SELECT '[{"id": 1, "name": "One"}, {"id": 2, "name": "Two"}]', 1
    
    UPDATE @TheTable 
    SET TheJSON = JSON_MODIFY(TheJSON, 'append $', JSON_QUERY(N'{"id": 3, "name": "Three"}')) 
    WHERE Condition = 1;
    
    Declare @temp nvarchar(max)
    
    select @temp= TheJSON   FROM @TheTable     
    
    select id,name   FROM OPENJSON(@temp)                              
     WITH (                              
     id  NVARCHAR(100)  ,                            
     name   NVARCHAR(100)                                                    
    
     )
    

    您好,您可以试试这个。这是给你想要的。谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 2015-02-02
      • 1970-01-01
      相关资源
      最近更新 更多