Condividi tramite


Usare OPENJSON con uno schema esplicito

Si applica a: SQL Server 2016 (13.x) e versioni successive database SQL di AzureIstanza gestita di SQL di AzureAzure Synapse Analytics (solo pool SQL serverless)endpoint di analisi SQL in Microsoft FabricWarehouse in Microsoft Fabric

Usare OPENJSON con uno schema esplicito per restituire una tabella formattata come specificato nella clausola WITH.

Ecco alcuni esempi che usano OPENJSON con uno schema esplicito. Per altre informazioni ed esempi, vedere OPENJSON (Transact-SQL).

Esempio: usare la clausola WITH per formattare l'output

La query seguente restituisce i risultati mostrati nella tabella riportata di seguito. Si noti che la clausola AS JSON fa in modo che i valori vengano restituiti come oggetti JSON anziché valori scalari in col5 e array_element.

DECLARE @json NVARCHAR(MAX) =
N'{"someObject":   
    {"someArray":  
      [  
          {"k1": 11, "k2": null, "k3": "text"},  
          {"k1": 21, "k2": "text2", "k4": { "data": "text4" }},  
          {"k1": 31, "k2": 32},  
          {"k1": 41, "k2": null, "k4": { "data": false }}     
       ]  
    }  
 }'  

SELECT * FROM  
 OPENJSON(@json, N'lax $.someObject.someArray')  
WITH ( k1 int,   
        k2 varchar(100),  
        col3 varchar(6) N'$.k3',  
        col4 varchar(10) N'lax $.k4.data',  
        col5 nvarchar(MAX) N'lax $.k4' AS JSON, 
        array_element nvarchar(MAX) N'$' AS JSON  
 )  

Risultati

k1 k2 col3 col4 col5 elemento di array
11 NULL "testo" NULL NULL {"k1": 11, "k2": null, "k3": "text"}
21 "text2" NULL "text4" { "data": "text4" } {"k1": true, "k2": "text2", "k4": { "data": "text4" } }
31 "32" NULL NULL NULL {"k1": 31, "k2": 32 }
41 NULL NULL falso { "data": false } {"k1": 41, "k2": null, "k4": { "data": false } }

Esempio: caricare JSON in una tabella SQL Server.

Nell'esempio seguente viene caricato un intero oggetto JSON in una tabella di SQL Server.

DECLARE @json NVARCHAR(MAX) = '{  
  "id" : 2,  
  "firstName": "John",  
  "lastName": "Smith",  
  "isAlive": true,  
  "age": 25,  
  "dateOfBirth": "2015-03-25T12:00:00",  
  "spouse": null  
  }';  

  INSERT INTO Person  
  SELECT *   
  FROM OPENJSON(@json)  
  WITH (id int,  
        firstName nvarchar(50), lastName nvarchar(50),   
        isAlive bit, age int,  
        dateOfBirth datetime2, spouse nvarchar(50))  

Altre informazioni su JSON nel motore di database SQL

Per un'introduzione visiva al supporto JSON predefinito in SQL Server e nel database SQL di Azure, vedere i video seguenti: