Usar OPENJSON com um esquema explícito (SQL Server)

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Banco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse Analytics (somente pool de SQL sem servidor)

Use OPENJSON com um esquema explícito para retornar uma tabela formatada como especificado na cláusula WITH.

Aqui estão alguns exemplos que usam OPENJSON com um esquema explícito. Para obter mais informações e mais exemplos, veja OPENJSON (Transact-SQL).

Exemplo - Usar a cláusula WITH para formatar a saída

A consulta a seguir retorna os resultados mostrados na tabela a seguir. Observe como a cláusula AS JSON faz com que valores sejam retornados como objetos JSON em vez de valores escalares em 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  
 )  

Resultados

k1 k2 col3 col4 col5 array_element
11 NULL "texto" NULL NULL {"k1": 11, "k2": nulo, "k3": "texto"}
21 "texto2" NULL "texto4" { "dados": "texto4" } {"k1": verdadeiro, "k2": "texto2", "k4": { "dados": "texto4" } }
31 "32" NULL NULL NULL {"k1": 31, "k2": 32 }
41 NULL NULL false { "dados": falso } {"k1": 41, "k2": nulo, "k4": { "dados": falso } }

Exemplo - Carregar o JSON em uma tabela do SQL Server.

O exemplo a seguir carrega um objeto JSON inteiro em uma tabela do 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))  

Saiba mais sobre JSON no SQL Server e no Banco de Dados SQL do Azure

Vídeos da Microsoft

Para obter uma introdução visual ao suporte interno para JSON no SQL Server e no Banco de Dados SQL do Azure, consulte os seguintes vídeos:

Confira também

OPENJSON (Transact-SQL)