JSON_ARRAY (Transact-SQL)
适用于:SQL Server 2022 (16.x) Azure SQL 数据库 Azure SQL 托管实例
从零个或更多表达式中构造 JSON 数组文本。
语法
JSON_ARRAY ( [ <json_array_value> [,...n] ] [ <json_null_clause> ] )
<json_array_value> ::= value_expression
<json_null_clause> ::=
NULL ON NULL
| ABSENT ON NULL
参数
json_array_value
是定义 JSON 数组中元素值的表达式。
json_null_clause
可用于控制 JSON_OBJECT
函数在 value_expression 为 NULL 时的行为。 在生成 JSON 数组中的元素值时,选项 NULL ON NULL
将 SQL NULL
值转换为 JSON null
值。 如果值为 NULL,选项 ABSENT ON NULL
将省略 JSON 数组中的元素。 此选项的默认设置为 ABSENT ON NULL
。
返回值
返回 nvarchar(max) 类型的有效 JSON 数组字符串。
若要了解 JSON_ARRAY
函数的输出内容,请查看以下文章:
FOR JSON 如何将 SQL Server 数据类型转换为 JSON 数据类型 (SQL Server)
JSON_ARRAY
函数使用FOR JSON
本文中描述的规则,在 JSON 数组输出中把 SQL 数据类型转换成 JSON 类型。FOR JSON 如何转义特殊字符和控制字符 (SQL Server)
JSON_ARRAY
函数按照这篇FOR JSON
文章中描述的方式在 JSON 输出中转义特殊字符和表示控制字符。
示例
示例 1
以下示例返回空 JSON 数组。
SELECT JSON_ARRAY();
结果
[]
示例 2
以下示例返回具有四个元素的 JSON 数组。
SELECT JSON_ARRAY('a', 1, 'b', 2)
结果
["a",1,"b",2]
示例 3
以下示例返回具有三个元素的 JSON 数组,因为其中一个输入值为 NULL。 由于省略 json_null_clause 且该选项的默认值为 ABSENT ON NULL,所以其中一个输入的 NULL 值不会被转换为 JSON 空值。
SELECT JSON_ARRAY('a', 1, 'b', NULL)
结果
["a",1,"b"]
示例 4
以下示例返回具有四个元素的 JSON 数组。 指定 NULL ON NULL 选项是为了让输入中的任意 SQL NULL 值在 JSON 数组中转换为 JSON 空值。
SELECT JSON_ARRAY('a', 1, NULL, 2 NULL ON NULL)
结果
["a",1,null,2]
示例 5
以下示例返回具有两个元素的 JSON 数组。 一个元素包含 JSON 字符串,另一个元素包含 JSON 对象。
SELECT JSON_ARRAY('a', JSON_OBJECT('name':'value', 'type':1))
结果
["a",{"name":"value","type":1}]
示例 6
以下示例返回具有三个元素的 JSON 数组。 一个元素包含 JSON 字符串,另一个元素包含 JSON 对象,而另一个元素包含 JSON 数组。
SELECT JSON_ARRAY('a', JSON_OBJECT('name':'value', 'type':1), JSON_ARRAY(1, null, 2 NULL ON NULL))
Result
["a",{"name":"value","type":1},[1,null,2]]
示例 7
以下示例返回 JSON 数组,其输入指定为变量或 SQL 表达式。
DECLARE @id_value nvarchar(64) = NEWID();
SELECT JSON_ARRAY(1, @id_value, (SELECT @@SPID));
结果
[1,"4BEA4F9F-D169-414F-AF99-9270FDB2EA62",55]
示例 8
以下示例返回查询中每行的 JSON 数组。
SELECT s.session_id, JSON_ARRAY(s.host_name, s.program_name, s.client_interface_name)
FROM sys.dm_exec_sessions AS s
WHERE s.is_user_process = 1;
结果
session_id | info |
---|---|
52 | ["WIN16-VM","Microsoft SQL Server Management Studio - Query",".Net SqlClient Data Provider"] |
55 | ["WIN16-VM","Microsoft SQL Server Management Studio - Query",".Net SqlClient Data Provider"] |
56 | ["WIN19-VM","SQLServerCEIP",".Net SqlClient Data Provider"] |