共用方式為


使用 OPENJSON 與明確的架構

適用於: SQL Server 2016(13.x)和更新版本,Azure SQL DatabaseAzure SQL 受控實例Azure Synapse Analytics(僅無伺服器 SQL 資源集區)在 Microsoft Fabric 中的 SQL 分析端點在 Microsoft Fabric 中的 Warehouse

使用 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  
 )  

結果

k1 k2 col3 col4 col5 陣列元素
11 NULL 文本 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 假的 { "data": 假 } {"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 Database Engine 中的 JSON

如需 SQL Server 和 Azure SQL Database 中內建 JSON 支援的觀看式簡介,請參閱下列影片: