SQL Server 中 JSON_MODIFY 的使用

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

输出结果如下图:

640?wx_fmt=png

More

注意:

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

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

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

Reference

  • https://docs.microsoft.com/en-us/sql/t-sql/functions/json-modify-transact-sql?view=sql-server-ver15

  • https://docs.microsoft.com/en-us/sql/relational-databases/json/json-path-expressions-sql-server?view=sql-server-ver15

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313044.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TypeScript 3.7稳定版发布

TypeScript 3.7 发布了,此版本带来了许多新特性。Optional Chaining首先一大亮点是 Optional Chaining,这是社区呼唤特别强烈的一个 ECMAScript 特性。最初它是 TypeScript 的 issue 跟踪器上第 16 个 issue,于 5 年前提交,要知道…

.NET手撸绘制TypeScript类图——上篇

.NET手撸绘制TypeScript类图——上篇近年来随着交互界面的精细化, TypeScript越来越流行,前端的设计也越来复杂,而 类图正是用简单的箭头和方块,反映对象与对象之间关系/依赖的好方式。许多工具都能生成 C#类图,有些工…

阅读源码学设计模式-单例模式

有些编码套路是公认的,大家都参照其编写符合可观赏性的代码,那就是设计模式现在.NETcore 默认提供了DI功能,那我想设计一个全局的引擎类,进行注入服务、解析服务、配置中间件。并且要求该引擎类全局唯一,其他地方不能进…

我终于知道post和get的区别

IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。码农:你知道get和post请求到底有什么区别&am…

【译】使用Blazor构建桌面应用

随着最近.NET Core 3的正式发布,我认为我会尝试一个有趣的小实验。我喜欢使用Electron来创建基于Web的桌面应用程序。我想了解有关Blazor(ASP.NET系列的最新成员)的更多信息。在这篇文章中,我将向您确切演示如何在15分钟内开始使用…

CAP的学习和应用

前言:用CAP有一段时间了,这里简单记录一下,这么好用的东西,小伙伴们赶紧上车吧一.CAP使用场景?平时工作中经常使用到MQ,如(kafka,rabbitmq...),用来简单的发布/订阅,经常会遇到以下几个问题常用方案,把SQL放前面,MQ放后面,MQ执行失败了,我们把整个SQL进行回滚,这种方案在单应用…

[功能发布]Excel催化剂地图可视化功能正式发布,欢迎使用!

地图可视化功能开发完成已过去1个多月,文章的阅读量与初定传播目标相差甚远。但因着热爱分享的缘故,在阅读量未及预期时,仍然破例对其功能进行发布。若真正喜爱Excel催化剂所开发的地图可视化,可通过完成小任务来获取使用资格。再…

WebAssembly生态将完善网络安全性

近日 Mozilla、Fastly、Intel 与 Red Hat 宣布成立联合组织 Bytecode Alliance(字节码联盟),该联盟旨在通过协作实施标准和提出新标准,以完善 WebAssembly 在浏览器之外的生态。WebAssembly 也叫 Wasm,它是为基于栈的虚…

我们终于可以把 bug 留给子孙后代了

“ 阅读本文大概需要 4 分钟。 ”今天在聊项目之前,我们先来聊一下历史。中学时候拿到的第一本历史书,上面是从智人的起源讲起的,他轻轻掠过尧舜禹,秦始皇统一六国,千古一相李斯。他喊二川溶溶,流入宫墙。五…

30分钟无坑部署K8S单Master集群

Jesse导读:11月9号,我在中国.NET开发者峰会(.NET Conf China 2019)上分享了之前ASP.NET Core和Kubernetes做微服务的经验,在10号的时候又联合张善友、陈计节两位大佬一起做了一个6个小时的动手实践,得到了非常好的反馈…

亲自实践Blazor构建桌面应用程序

首先是安装.NET Core 3.0 与Node.js.Net Core 版本为:3.0.100Node.js安装版本为:v12.13.0用到的8个命令mkdir blazor-electron-democd blazor-electron-demodotnet new blazorserver --no-httpsdotnet add package ElectronNET.APIdotnet new tool-manif…

行云万里,转型未来 | 行云创新受邀参加2019中国.NET开发者峰会

2019 年 11 月 9 日,中国 .NET 开发者峰会(.NET Conf China 2019)在上海拉开帷幕,这是中国 .NET 社区的年度盛会。行云创新受邀参加了此次峰会,为当前最热门的科技专题带来了精彩的演讲,与全国的 .NET 开发…

西安活动 | 云时代,享未来 .NET 线下沙龙

活动介绍:在云时代到来的今天,越来越多的应用已经依赖于云而构建,这正得益于云给软件开发带来的低成本,易扩展,可重用的便捷之处。.NET Core平台就是为云而诞生的,毫无疑问它是构建云应用的首要之选。已经磨练5年时间&…

.NET手撸绘制TypeScript类图——下篇

.NET手撸绘制TypeScript类图——下篇在上篇的文章中,我们介绍了如何使用 .NET解析 TypeScript,这篇将介绍如何使用代码将类图渲染出来。类型定义渲染不出意外,我们继续使用 FlysEngine。虽然文字排版没做过,但不试试怎么知道好不好…

China .NET Conf 2019-.NET技术架构下的混沌工程实践

这个月的8号、9号,个人很荣幸参加了China.NET Conf 2019 , 中国.NET开发者峰会,同时分享了技术专题《.NET技术架构下的混沌工程实践》,给广大的.NET开发小伙伴介绍混沌工程和高可用性改造实践。会后大家伙聚餐的时候,陈计节老师建…

分布式应用框架 Dapr

微服务架构已成为构建云原生应用程序的标准,微服务架构提供了令人信服的好处,包括可伸缩性,松散的服务耦合和独立部署,但是这种方法的成本很高,需要了解和熟练掌握分布式系统。为了使用所有开发人员能够使用任何语言和任何框架轻松…

.NET Core on K8S 学习与实践系列文章索引 (更新至20191116)

更新记录:-- 2019-11-16 增加Docker容器监控系列文章// 此外,今天是11月17日,我又老了一岁,祝我自己生日快乐!近期在学习Kubernetes,基于之前做笔记的习惯,已经写了一部分文章,因此给…

身边的设计模式(一):单例 与 RedisCacheManager

大家好,以后我会用23篇文章,来给大家讲解设计模式,当然如果你看过我的项目,很多设计模式已经很会了,只是没有注意到,我这里会讲解一下,大家就会发现,如果你看懂了我的项目&#xff0…

Kubernetes包管理器Helm发布3.0版本

Helm 3.0 已经发布,该版本是 CLI 工具的最新主要版本,主要关注简单性、安全性和可用性,内容如下:新特性移除 Tiller(Helm 2 是一种 Client-Server 结构,客户端称为 Helm,服务器称为 Ti…

“兼职”运维的常用命令

自从产品转到了 dotNET Core 之后,更深入的接触 Linux和 Docker ,而我每天的工作中,有一部分时间相当于在“兼职”做一些运维的事情。下面是一些在日常中常用的命令,算是个备忘吧。环境操作系统:CentOS7Docker&#xf…