适用于:

SQL Server 2016 (13.x)及更高版本
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
Microsoft Fabric 中的 SQL 分析终结点
Microsoft Fabric 中的仓库
Microsoft Fabric 预览版中的 SQL 数据库
OPENJSON
表值函数分析 JSON 文本,并将 JSON 输入中的对象和属性作为行和列返回。 换句话说,
OPENJSON
为 JSON 文档提供行集视图。 可以显式指定行集中的列以及用于填充列的 JSON 属性路径。 由于
OPENJSON
返回一组行,因此可以在
OPENJSON
Transact-SQL 语句的子句中使用
FROM
,就像可以使用任何其他表、视图或表值函数一样。
用于
OPENJSON
将 JSON 数据导入 SQL Server,或将 JSON 数据转换为不能直接使用 JSON 的应用或服务的关系格式。
该
OPENJSON
函数仅在兼容级别 130 或更高版本下可用。 如果数据库兼容性级别低于 130,则 SQL Server 找不到并运行该
OPENJSON
函数。 其他 JSON 函数在所有兼容性级别均可用。
可以在
sys.databases
视图或数据库属性中查看兼容级别。 可以使用以下命令更改数据库的兼容级别:
ALTER DATABASE DatabaseName SET COMPATIBILITY_LEVEL = 130
OPENJSON( jsonExpression [ , path ] ) [ <with_clause> ]
<with_clause> ::= WITH ( { colName type [ column_path ] [ AS JSON ] } [ ,...n ] )
OPENJSON表值函数分析作为第一个参数提供的 jsonExpression,并返回一行或多行,其中包含表达式中 JSON 对象中的数据。
jsonExpression 可以包含嵌套的子对象。 如果要从 jsonExpression 中分析子对象,可以为 JSON 子对象指定 路径 参数。
openjson
默认情况下,OPENJSON表值函数返回三列,其中包含 jsonExpression 中找到的每个key:value对的键名称、值和类型。 或者,可以通过提供with_clause显式指定返回的结果集OPENJSON的架构。
with_clause
with_clause包含一个列列表,其中包含要OPENJSON返回的列类型。 默认情况下,将 OPENJSONjsonExpression 中的键与 with_clause 中的列名匹配(在本例中,匹配键表示区分大小写)。 如果列名与键名称不匹配,可以提供可选的column_path,这是引用 jsonExpression 中的键的 JSON 路径表达式。
Arguments
jsonExpression
是包含 JSON 文本的 Unicode 字符表达式。
OPENJSON 循环访问 JSON 表达式中的数组的元素或对象的属性,并为每个元素或属性返回一行。 以下示例返回作为 jsonExpression 提供的对象的每个属性:
DECLARE @json NVARCHAR(2048) = N'{
"String_value": "John",
"DoublePrecisionFloatingPoint_value": 45,
"DoublePrecisionFloatingPoint_value": 2.3456,
"BooleanTrue_value": true,
"BooleanFalse_value": false,
"Null_value": null,
"Array_value": ["a","r","r","a","y"],
"Object_value": {"obj":"ect"}
SELECT * FROM OpenJson(@json);
Results:
value
引用 jsonExpression 中的对象或数组的可选 JSON 路径表达式。
OPENJSON 查找位于指定位置的 JSON 文本,并仅分析引用的片段。 有关详细信息,请参阅 JSON 路径表达式。
可以将变量作为 路径的值提供。 (SQL Server 2016(13.x)和早期版本中不支持此功能。
以下示例通过指定 路径返回嵌套对象:
DECLARE @json NVARCHAR(4000) = N'{
"path": {
"to":{
"sub-object":["en-GB", "en-UK","de-AT","es-AR","sr-Cyrl"]
SELECT [key], value
FROM OPENJSON(@json,'$.path.to."sub-object"')
Results
Value
分析 JSON 数组时 OPENJSON ,该函数将 JSON 文本中元素的索引作为键返回。
用于将路径各步与 JSON 表达式的属性进行匹配的比较不区分大小写且无法识别排序规则(即是 BIN2 比较)。
数组元素标识
Azure S