适用于:SQL Server 2016 (13.x)及更高版本
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
Microsoft Fabric 预览版中的 SQL 数据库
与 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 转换成临时表
以下查询返回 信息 对象的所有属性。
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”:“Great Britain” } | 5 |
tags | [ “体育”, “水球” ] | 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 数据库引擎中的 JSON
Microsoft视频
有关内置 JSON 支持的视觉简介,请参阅以下视频: