首页 前端知识 SQLServer2022新特性JSON_OBJECT从零个或多个表达式中构造JSON对象

SQLServer2022新特性JSON_OBJECT从零个或多个表达式中构造JSON对象

2024-09-10 23:09:39 前端知识 前端哥 113 53 我要收藏

SQLServer2022新特性JSON_OBJECT从零个或多个表达式中构造 JSON 对象文本

参考中文官方文档
https://learn.microsoft.com/zh-cn/sql/t-sql/functions/json-object-transact-sql?view=sql-server-ver16

参考英文文官方文档
https://learn.microsoft.com/en-us/sql/t-sql/functions/json-object-transact-sql?view=sql-server-ver16

1、本文内容

  • 语法
  • 参数
  • 返回值
  • 示例

适用于:

  • SQL Server 2022 (16.x)
  • Azure SQL 数据库
  • Azure SQL 托管实例

从零个或多个表达式中构造 JSON 对象文本。

2、语法

JSON_OBJECT ( [ <json_key_value> [,...n] ] [ json_null_clause ] )
<json_key_value> ::= json_key_name : value_expression
<json_null_clause> ::=
NULL ON NULL
| ABSENT ON NULL
复制

3、参数

json_key_name
是定义 JSON 键名称值的字符表达式。

value_expression 是定义 JSON 键值的表达式。

json_null_clause
可用于控制 JSON_OBJECT 函数在 value_expressio 为 NULL 时的行为。 在生成 JSON 键值时,选项 NULL ON NULL 将 SQL NULL 值转换为 JSON NUL 值。 如果值为 ABSENT ON NULL,选项 NULL 将省略整个键。 此选项的默认设置为 NULL ON NULL。

4、返回值

返回 nvarchar(max) 类型的有效 JSON 对象字符串。

若要了解 JSON_OBJECT 函数的输出内容,请查看以下文章:

FOR JSON 如何将 SQL Server 数据类型转换为 JSON 数据类型 (SQL Server)
JSON_OBJECT 函数使用这篇 FOR JSON 文章中描述的规则在 JSON 输出中将 SQL 数据类型转换为 JSON 类型。

FOR JSON 如何转义特殊字符和控制字符 (SQL Server)
JSON_OBJECT 函数按照这篇 FOR JSON 文章中描述的方式在 JSON 输出中转义特殊字符和表示控制字符。

https://learn.microsoft.com/en-us/sql/relational-databases/json/how-for-json-converts-sql-server-data-types-to-json-data-types-sql-server?view=sql-server-ver16

https://learn.microsoft.com/en-us/sql/relational-databases/json/how-for-json-escapes-special-characters-and-control-characters-sql-server?view=sql-server-ver16

5、示例

5.1、返回空 JSON 对象

以下示例返回空 JSON 对象

SELECT JSON_OBJECT() AS return_json;
return_json
-----------------------------------------------
{}
(1 行受影响)
复制

5.2、返回包含两个键的 JSON 对象

以下示例返回包含两个键的 JSON 对象

DECLARE @name NVARCHAR(50) = 'SQLServer2022';
DECLARE @age INT = 88;
SELECT JSON_OBJECT('name':@name, 'age':@age) AS return_json;
return_json
-----------------------------------------------------------
{"name":"SQLServer2022","age":88}
(1 行受影响)
复制

5.3、返回包含一个键的 JSON 对象,其中一个键的值为 NULL

以下示例返回包含一个键的 JSON 对象,因为其中一个键的值为 NULL,并且指定了 ABSENT ON NULL 选项。

SELECT JSON_OBJECT('name':'value', 'type':NULL ABSENT ON NULL) AS return_json;
return_json
--------------------------------------------------
{"name":"value"}
(1 行受影响)
复制

以下示例返回包含一个键的 JSON 对象,因为其中一个键的值为 NULL,并且指定了 NULL ON NULL 选项。

-- NULL ON NULL 选项 为默认值
SELECT JSON_OBJECT('name':'value', 'type':NULL) AS return_json;
-- OR
SELECT JSON_OBJECT('name':'value', 'type':NULL NULL ON NULL) AS return_json;
return_json
----------------------------------------------------
{"name":"value","type":null}
(1 行受影响)
复制

5.4、返回包含两个键的 JSON 对象包括字符串和JSON 数组

以下示例返回包含两个键的 JSON 对象。 一个键包含 JSON 字符串,另一个键包含 JSON 数组。

SELECT JSON_OBJECT('id':1, 'info':JSON_ARRAY('SQLNode1,DBadmin')) AS return_json;
return_json
--------------------------------------------------------
{"id":1,"info":["SQLNode1,DBadmin"]}
(1 行受影响)
复制

5.5、返回包含两个键的 JSON 对象包含字符串和JSON 对象

以下示例返回包含两个键的 JSON 对象。 一个键包含 JSON 字符串,另一个键包含 JSON 对象。

DECLARE @name NVARCHAR(50) = 'NBA Games';
DECLARE @age INT = 30;
SELECT JSON_OBJECT('id':'1001', 'info':JSON_OBJECT('name':@name, 'age':@age)) AS return_json;
return_json
-------------------------------------------------------------------
{"id":"1001","info":{"name":"NBA Games","age":30}}
(1 行受影响)
复制

5.6、输入指定为变量或 SQL表达式返回JSON 对象

以下示例返回 JSON 对象,其输入指定为变量或 SQL 表达式。

DECLARE
@id_key nvarchar(10) = N'id',
@id_value nvarchar(64) = NEWID();
SELECT JSON_OBJECT
( 'username':USER_NAME(),
@id_key:@id_value,
'sid':(SELECT @@SPID),
'sys_date':(SELECT GETDATE())
) AS return_json;
return_json
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
{"username":"dbo","id":"7105CD3C-041F-4CEC-AA98-0621F008C3B8","sid":68,"sys_date":"2024-05-29T09:47:01.893"}
(1 行受影响)
复制

5.7、在查询中对每行返回一个 JSON 对象

以下示例在查询中对每行返回一个 JSON 对象。

-- 创建表及插入数据
CREATE TABLE Persons (
ID INT PRIMARY KEY,
Name NVARCHAR(50),
Age INT
);
INSERT INTO Persons VALUES (1, 'John Doe', 30);
INSERT INTO Persons VALUES (2, 'Jane Smith', 25);
-- 查询表数据
SELECT ID,Name,Age FROM Persons;
ID Name Age
----------- -------------------------------------------------- -----------
1 John Doe 30
2 Jane Smith 25
(2 行受影响)
-- Result
SELECT
ID,
JSON_OBJECT('name':Name, 'age':Age) AS PersonJson
FROM Persons;
ID personJson
----------- ---------------------------------------------------
1 {"name":"John Doe","age":30}
2 {"name":"Jane Smith","age":25}
(2 行受影响)
复制
转载请注明出处或者链接地址:https://www.qianduange.cn//article/18137.html
标签
sqlserver
评论
还可以输入200
共0条数据,当前/页
发布的文章

安装Nodejs后,npm无法使用

2024-11-30 11:11:38

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!