Uso de OPENJSON con un esquema explícito (SQL Server)

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (solo grupo de SQL sin servidor)

Use OPENJSON con un esquema explícito para devolver una tabla que tiene el formato especificado en la cláusula WITH.

Estos son algunos ejemplos que utilizan OPENJSON con el esquema explícito. Para obtener más información y más ejemplos, consulte OPENJSON (Transact-SQL).

Ejemplo - Uso de la cláusula WITH para dar formato a la salida

La siguiente consulta devuelve los resultados mostrados en la tabla siguiente. Observe cómo la cláusula AS JSON hace que los valores se devuelvan como objetos JSON, en lugar de como valores escalares en col5 y 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 "text" 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 false { "data": false } {"k1": 41, "k2": null, "k4": { "data": false } }

Ejemplo: Carga de JSON en una tabla de SQL Server.

En el ejemplo siguiente se carga un objeto JSON completo en una tabla de 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))  

Más información sobre JSON en SQL Server y Azure SQL Database

Vídeos de Microsoft

Para obtener una introducción visual a la compatibilidad integrada de JSON en SQL Server y Azure SQL Database, vea los siguientes vídeos:

Consulte también

OPENJSON (Transact-SQL)