使用具有显式架构的 OPENJSON

适用于:SQL Server 2016 (13.x) 及更高版本 Azure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics (仅限无服务器 SQL 池)SQL 分析终结点在Microsoft fabric SQL 数据库中Microsoft Fabric SQL 数据库中的 Microsoft Microsoft FabricWarehouse中的 SQL 分析终结点

使用OPENJSON显式架构,并按照WITH子句中指定的格式返回表格。

下面是使用具有显式架构 OPENJSON 的一些示例。 有关详细信息,请参阅 OPENJSON(Transact-SQL)。

示例 - 使用 WITH 子句设置输出格式

以下查询返回下表中显示的结果。 请注意 AS JSON 子句如何使值作为 JSON 对象返回,而不是 col5array_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  
 )  

Results

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 } }

示例 - 将 JSON 加载到 SQL Server 表中。

下面的示例展示了将整个 JSON 对象加载到 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))  

详细了解 SQL 数据库引擎中的 JSON

有关内置 JSON 支持的视觉简介,请参阅以下视频: