使用具有默认架构的 OPENJSON

适用范围:SQL Server 2016 (13.x) 及更高版本 Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics

使用具有默认架构的 OPENJSON 可返回一个表,其中每行显示对象的一个属性或数组中的一个元素

下面的一些示例展示了如何使用具有默认架构的 OPENJSON 。 有关详细信息和更多示例,请参阅 OPENJSON (Transact-SQL)

示例 - 返回对象的各个属性

查询

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

结果

密钥
name John
surname Doe
age 45

示例 - 返回数组的各个元素

查询

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

结果

密钥
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')

结果

密钥 类型
type 1 0
address { "town":"Bristol", "county":"Avon", "country":"Great Britain" } 5
标记 [ "Sport", "Water polo" ] 4

示例 - 合并关系数据和 JSON 数据

在下面的示例中,SalesOrderHeader 表中有 SalesReason 文本列,其中包含 JSON 格式的 SalesOrderReasons 数组。 SalesOrderReasons 对象包含“Manufacturer”和“Quality”之类的属性。此示例创建了一个报表,通过扩展销售原因的 JSON 数组,将每个销售订单行与相关的销售原因联接,就如同将销售原因存储在单独的子表中一样。

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

在此示例中,OPENJSON 返回了销售原因表,将原因显示为值列。 CROSS APPLY 运算符将每个销售订单行与 OPENJSON 表值函数返回的行联接。

详细了解 SQL Server 和 Azure SQL 数据库中的 JSON

Microsoft 视频

有关 SQL Server 和 Azure SQL 数据库中内置 JSON 支持的视频介绍,请观看以下视频:

另请参阅

OPENJSON (Transact-SQL)