共用方式為


使用 OPENJSON 搭配預設結構描述

適用於:SQL Server 2016 (13.x) 及以後版本 Azure SQL Database AzureSQL Managed InstanceAzure Synapse AnalyticsSQL database in Microsoft Fabric

使用 OPENJSON 搭配預設架構,為物件的每個屬性或陣列中的每個元素傳回一個包含一行的表格。

以下是搭配默認架構使用的 OPENJSON 一些範例。 如需詳細資訊和其他範例,請參閱 OPENJSON (Transact-SQL)

範例 - 傳回物件的每個屬性

Query

SELECT *
FROM OPENJSON('{"name":"John","surname":"Doe","age":45}') 

Results

Key Value
name John
surname Doe
age 45

範例 - 傳回陣列的每個元素

Query

SELECT [key],value
FROM OPENJSON('["en-GB", "en-UK","de-AT","es-AR","sr-Cyrl"]') 

Results

Key Value
0 en-GB
1 en-UK
2 de-AT
3 es-AR
4 sr-Cyrl

範例 - 將 JSON 轉換成暫存資料表

下列查詢會傳回 info 物件的所有屬性。

DECLARE @json NVARCHAR(MAX)

SET @json=N'{  
     "info":{    
       "type":1,  
       "address":{    
         "town":"Bristol",  
         "county":"Avon",  
         "country":"Great Britain"  
       },  
       "tags":["Sport", "Water polo"]  
    },  
    "type":"Basic"  
 }'

SELECT *
FROM OPENJSON(@json,N'lax $.info')

Results

Key Value 類型
型別 1 0
address { “town”:“Bristol”, “county”:“Avon”, “country”:“英國” } 5
tags [ "運動", "水球" ] 4

範例 - 合併關聯式資料和 JSON 資料

在下列範例中,SalesOrderHeader 資料表的 SalesReason 文字資料行包含 JSON 格式的 SalesOrderReasons 陣列。 SalesOrderReasons 物件包含「製造商」和「品質」這類屬性。此範例所建立的報表會聯結每個銷售訂單資料列與相關銷售原因,方法是展開銷售原因的 JSON 陣列,就像原因是儲存在個別子資料表中一樣。

SELECT SalesOrderID,OrderDate,value AS Reason
FROM Sales.SalesOrderHeader
CROSS APPLY OPENJSON(SalesReasons)

在此範例中,OPENJSON 會傳回銷售原因的資料表,其中原因顯示在值欄位中。 CROSS APPLY 運算子將每個銷售訂單資料列與 OPENJSON 表格值函數所返回的資料列結合起來。

深入瞭解 SQL Database Engine 中的 JSON

Microsoft 影片

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