共用方式為


使用 OPENJSON 與明確的架構

適用於:SQL Server 2016 (13.x) 及以後版本 Azure SQL 資料庫Azure SQL Managed InstanceAzure Synapse Analytics(僅限 serverless SQL pool 使用)SQL Analytics endpoint in Microsoft FabricWarehouse in Microsoft FabricSQL database in Microsoft Fabric

搭配明確架構使用 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": 假 } {“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

如需內建 JSON 支援的視覺效果簡介,請參閱下列影片: