经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
SQL Server 中 `JSON_MODIFY` 的使用
来源:cnblogs  作者:WeihanLi  时间:2019/11/14 8:45:23  对本文有异议

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 的使用

示例

直接来看示例:

  1. -- JSON_MODIFY 测试
  2. DECLARE @testJsonValue NVARCHAR(100) = N'{"name":"John","skills":["C#","SQL"]}';
  3. PRINT @testJsonValue;
  4. -- 适用 append 在数组中追加元素
  5. PRINT JSON_MODIFY(@testJsonValue, 'append $.skills', 'Azure');
  6. -- 无效用法,这样会把属性更新为字符串
  7. PRINT JSON_MODIFY(@testJsonValue, '$.skills', '["C#","T-SQL","Azure"]');
  8. -- 修改数组
  9. PRINT JSON_MODIFY(@testJsonValue, '$.skills', JSON_QUERY('["C#","T-SQL","Azure"]'));
  10. -- 修改数组某个元素
  11. PRINT JSON_MODIFY(@testJsonValue, '$.skills[0]', 'CSharp');
  12. -- 增加属嵌套
  13. PRINT JSON_MODIFY(@testJsonValue, '$.Likes', JSON_QUERY('{"Girl": "Alice"}'));
  14. PRINT JSON_MODIFY(@testJsonValue, '$.Likes', JSON_QUERY('{"Animals": ["Dog","Cat"]}'));
  15. -- 增加 bool 属性
  16. PRINT JSON_MODIFY(@testJsonValue, '$.ShowAwardsAfterQuizEnds', CONVERT(BIT, 'false'));
  17. PRINT JSON_MODIFY(@testJsonValue, '$.ShowAwardsAfterQuizEnds', CONVERT(BIT, 1));
  18. -- 增加 int 属性
  19. PRINT JSON_MODIFY(@testJsonValue, '$.TotalWinnersCount', CONVERT(INT, '20'));
  20. PRINT JSON_MODIFY(@testJsonValue, '$.TotalWinnersCount', 20);
  21. -- 删除属性
  22. PRINT JSON_MODIFY(@testJsonValue, '$.name', NULL);

输出结果如下图:

More

注意:

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

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

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

Reference

原文链接:http://www.cnblogs.com/weihanli/p/11853827.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号