SQL Server 中 `JSON_MODIFY` 的使用

2022-10-13,,

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);

输出结果如下图:

more

注意:

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

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

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

reference

《SQL Server 中 `JSON_MODIFY` 的使用.doc》

下载本文的Word格式文档,以方便收藏与打印。