欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQL Server 中 `JSON_MODIFY` 的使用

程序员文章站 2022-05-09 16:25:41
SQL Server 中 的使用 Intro SQL Server 从 2016 开始支持了一些 JSON操作,最近的项目里也是好多地方字段直接存成了 JSON,需要了解一下怎么在SQL Server 中操作 JSON. JSON支持适用于 SQL Server 2016 及以上版本 和 Azure ......

sql server 中 json_modify 的使用

intro

sql server 从 2016 开始支持了一些 json操作,最近的项目里也是好多地方字段直接存成了 json,需要了解一下怎么在sql server 中操作 json.

json支持适用于 sql server 2016 及以上版本 和 azure sql database。

最近在项目中很多地方字段都是存一个 json 字符串,尤其是针对一些有很多不确定的属性的数据来说,这样的信息我们一般都放在一个 extra 之类的字段保存一个 json 字符串,由于不确定性很大,很有可能会遇到要修改这个 json 字符串结构的问题,在修改 json 对象的某一个值和修改 json 的结构时都会用到 json_modify,今天就来介绍一下 json_modify 的使用

示例

直接来看示例:

-- json_modify 测试
declare @testjsonvalue nvarchar(100) = n'{"name":"john","skills":["c#","sql"]}';
print @testjsonvalue;

-- 适用 append 在数组中追加元素
print json_modify(@testjsonvalue, 'append $.skills', 'azure');

-- 无效用法,这样会把属性更新为字符串
print json_modify(@testjsonvalue, '$.skills', '["c#","t-sql","azure"]');

-- 修改数组
print json_modify(@testjsonvalue, '$.skills', json_query('["c#","t-sql","azure"]'));
-- 修改数组某个元素
print json_modify(@testjsonvalue, '$.skills[0]', 'csharp');


-- 增加属嵌套
print json_modify(@testjsonvalue, '$.likes', json_query('{"girl": "alice"}'));
print json_modify(@testjsonvalue, '$.likes', json_query('{"animals": ["dog","cat"]}'));

-- 增加 bool 属性
print json_modify(@testjsonvalue, '$.showawardsafterquizends', convert(bit, 'false'));
print json_modify(@testjsonvalue, '$.showawardsafterquizends', convert(bit, 1));

-- 增加 int 属性
print json_modify(@testjsonvalue, '$.totalwinnerscount', convert(int, '20'));
print json_modify(@testjsonvalue, '$.totalwinnerscount', 20);

-- 删除属性
print json_modify(@testjsonvalue, '$.name', null);

输出结果如下图:

SQL Server 中 `JSON_MODIFY` 的使用

more

注意:

  • 如果要更新的字段没有是一个 json 对象或是一个数组,那么需要使用 json_query ,否则更新的对应的属性就成了字符串了。

  • 如果是要删除某一个属性,把某一个属性更新为 null 即可

  • 如果要增加一个 bool 类型的属性,需要把对应的值转换为 bit 类型

reference