SQLServer2022 ISJSON新特性增强json_type_constraint参数

SQLServer2022 ISJSON新特性增强,引入json_type_constraint参数,检查json类型

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

1、本文内容

  • 语法
  • 参数
  • 返回值
  • 注解

适用于:
SQL Server 2016 (13.x) 及更高版本
Azure SQL 数据库
Azure SQL 托管实例

Transact-SQL 语法约定
https://learn.microsoft.com/zh-cn/sql/t-sql/language-elements/transact-sql-syntax-conventions-transact-sql?view=sql-server-ver15

2、语法

ISJSON ( expression [, json_type_constraint] )  

3、参数

expression
要测试的字符串。

json_type_constraint
指定要签入输入的 JSON 类型。 有效值为 VALUE、ARRAY、OBJECT 或 SCALAR。 在 SQL Server 2022 (16.x) 中引入。

备注
Azure Synapse Analytics 专用池不支持参数 json_type_constraint

4、返回值

如果字符串包含有效 JSON,则返回 1;否则,返回 0。 如果 expression 为 NULL,则返回 NULL。

如果语句省略 json_type_constraint,函数将测试输入是否为有效的 JSON 对象或数组,如果是,则返回 1;否则返回 0。

如果指定了 json_type_constraint ,该函数将检查 JSON 类型,如下所示:
值说明

  • VALUE 测试有效的 JSON 值。 这可以是 JSON 对象、数组、数字、字符串或三个字面量值之一(false、true、null)
  • ARRAY 测试有效的 JSON 数组
  • OBJECT 测试有效的 JSON 对象
  • SCALAR 测试有效的 JSON 标量 - 数字或字符串

json_type_constraint 值 SCALAR 可用于测试符合 IETF RFC 8259 的仅包含顶级 JSON 标量值的 JSON 文档。 不包含顶级 JSON 标量值的 JSON 文档符合 IETF RFC 4627。

不返回错误。

5、注解

ISJSON 不检查在相同级别的键的唯一性。

6、示例

6.1、如果参数值包含有效 JSON

如果参数值 @param 包含有效 JSON,则下面的示例有条件地运行语句块。

6.1.1、参数值@param 包含有效 JSON

DECLARE @param varchar(256)
SET @param = N'[{"name": "John","skills": [ "SQL", "C#", "Azure" ]},{"name": "Jane","surname": "Doe"}
]'IF (ISJSON(@param) =1)  
BEGIN  PRINT  'the string contains valid JSON'
END
ELSE
BEGINPRINT 'the string does not contains valid JSON'
END-- Return value
the string contains valid JSON
在这里插入代码片

6.1.2、参数值@param 不包含有效 JSON

DECLARE @param varchar(256)
SET @param = N'
{"String_value": "John","DoublePrecisionFloatingPoint_value": 45,"DoublePrecisionFloatingPoint_value": 2.3456,"BooleanTrue_value": true,"BooleanFalse_value": false,"Null_value": null,"Array_value": ["a","r","r","a","y"],"Object_value": {"obj":"ect"}
}'IF (ISJSON(@param) =1)  
BEGIN  PRINT  'the string contains valid JSON'
END
ELSE
BEGINPRINT 'the string does not contains valid JSON'
END-- Return value
the string does not contains valid JSON

6.2、示例返回其列 json_col 包含有效 JSON 的行

下面的示例将返回其列 json_col 包含有效 JSON 的行

with cte_json as (
select 1001 as id,'[{"nameinfo":"sqlserver2022","age":29}]' as json_col
union all
select 1002 as id,'[{"nameinfo":"sqlserver2019","age":26}]' as json_col
union all
select 1003 as id,'{"nameinfo":"sqlserver2000",age:22}' as json_col
)
SELECT id, json_col
FROM cte_json
WHERE ISJSON(json_col) = 1id          json_col
----------- ---------------------------------------
1001        [{"nameinfo":"sqlserver2022","age":29}]
1002        [{"nameinfo":"sqlserver2019","age":26}](2 行受影响)

6.3、示例 3

下面的示例将返回其列 json_col 在顶级包含有效 JSON SCALAR 值的行。

with cte_json as (
select 1001 as id,'[{"nameinfo":"sqlserver2022","age":29}]' as json_col
union all
select 1002 as id,'[{"nameinfo":"sqlserver2019","age":26}]' as json_col
union all
select 1003 as id,'{"nameinfo":"sqlserver2000",age:22}' as json_col
union all
select 1004 as id,N'[{"name": "John","skills": [ "SQL", "C#", "Azure" ]},{"name": "Jane", "surname": "Doe"}]' as json_col 
)
SELECT id, json_col
FROM cte_json
WHERE ISJSON(json_col, SCALAR) = 1id          json_col
----------- ------------------------------------------------------------------------(0 行受影响)

6.4、示例返回 json_type_constraint类型为VALUE

下面的示例返回 1,因为输入是有效的 JSON 值 - true。

SELECT ISJSON('[{"name": "John","skills": [ "SQL", "C#", "Azure" ]},{"name": "Jane", "surname": "Doe"}]', VALUE) as ISJSON_VALUEISJSON_VALUE
------------
1

下面的示例返回 0,因为输入是无效的 JSON 值。

SELECT ISJSON('{"nameinfo":"sqlserver2000",age:22}', VALUE) as ISJSON_VALUEISJSON_VALUE
------------
0(1 行受影响)

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

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

相关文章

Java列表导出时将附件信息压缩成一个zip

一:使用场景 在最近的工作当中遇到了一个需求,在列表导出时,不仅需要将列表信息导出为excel文件,同时也需要将列表每一条数据所对应的附件信息放在同一个文件夹当中,并且压缩成一个zip响应给浏览器。首先后端需要写两…

Llama模型家族之使用 Supervised Fine-Tuning(SFT)微调预训练Llama 3 语言模型(三)通过web页面方式微调

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (三) 基于 LlaMA…

Amazon云计算AWS(一)

目录 一、基础存储架构Dynamo(一)Dynamo概况(二)Dynamo架构的主要技术 二、弹性计算云EC2(一)EC2的基本架构(二)EC2的关键技术(三)EC2的安全及容错机制 提供的…

Python自动化办公Excel数据处理实战指南

目录 一、引言 二、需求分析 三、技术选型 四、实战操作 数据读取 数据清洗 数据分析 数据输出 五、学习资源推荐: 六、结语 一、引言 在现代办公环境中,Excel数据处理是一项不可或缺的技能。然而,当数据量庞大、处理流程复杂时&a…

Linux文本文件管理003

★排序、去重、统计★ 1)排序 sort -n按照数值排序 -r降序排列 2)去重 uniq 过滤相邻、重复的行 -c 对重复行计数 3)统计 wc 统计文件中的字节数、单词数、行数 -l 显示行数 今天通过使用grep、awk、cut指令和上面几个选项提取文本文件…

Java开发常见基础问题

Java开发的多个方面,包括但不限于Java基础知识、多线程并发、JVM、框架使用、数据库、设计模式、网络编程等。 以下是一些常见的问题以及回答的方向: Java 开发技术常见问题(一) Java 基础知识 对象和类的区别是什么&#xff1…

专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(八)

本系列课程,将重点讲解Phpsploit-Framework框架软件的基础使用! 本文章仅提供学习,切勿将其用于不法手段! 继续接上一篇文章内容,讲述如何进行Phpsploit-Framework软件的基础使用和二次开发。 现在,我们…

什么是Spring的Java配置?它相比XML配置有何优势?

Spring的Java配置指的是使用Java注解和Java代码来配置Spring应用的方式,它是Spring框架提供的一种配置Spring容器和其Bean的替代方法,与传统的基于XML的配置相比,Java配置提供了一种类型安全和更具可读性的配置方式。 Java配置的定义&#x…

三十、openlayers官网示例解析Double click, Drag and Zoom——第二次点击鼠标拖拽缩放地图效果、取消地图双击放大事件

这篇展示了如何在地图上添加第二次按下鼠标移动鼠标实现拖拽缩放地图效果。 官网demo地址: Double click, Drag and Zoom 官网介绍文字的翻译如下: 示例比较简单,直接贴代码: const map new Map({//添加第二次点击拖拽缩放地图i…

一文了解等保2.0中IPS与IDS的差异

IPS(入侵防御系统) 入侵防御系统是一部能够监视网络或网络设备的网络资料传输行为的计算机网络安全设备,能够即时的中断、调整或隔离一些不正常或是具有伤害性的网络资料传输行为。 对异常的、可能是入侵行为的数据进行检测和报警&#xff…

MM模块六(收货)

接到供应商收到的货以后,进行一个收货的动作 收货:MIGO 1.消耗物料的采购订单 数量是供应商的数量 消耗物料的采购订单,收进来的货物直接进入消耗,不会增加库存,所以这里没有库存地点进行选择 点击过账 收货后在采购…

bash中的通配符小结

【bash中的通配符】 在 Bash 中,如果需要模糊匹配文件名或目录名,就要用到通配符。下面为常用的通配符 【通配符】 【说明】 * 匹配0或任意个字符 ? 匹配一个任意字符 [-] …

微服务架构五大设计模式详解,助你领跑行业

微服务架构设计模式详解(5种主流模式) 微服务架构 微服务,一种革命性的架构模式,主张将大型应用分解为若干小服务,通过轻量级通信机制互联。每个服务专注特定业务,具备独立部署能力,轻松融入生产环境,为系…

2005-2022年各省全体居民人均可支配收入数据(无缺失)

2005-2022年各省全体居民人均可支配收入数据(无缺失) 1、时间:2005-2022年 2、来源:国家统计局、统计年鉴 3、指标:全体居民人均可支配收入 4、范围:31省 5、缺失情况:无缺失 6、指标解释…

java多线程创建方式

1. 继承Thread类 这种方式是通过创建一个新的类继承自Thread类,并覆盖run()方法来创建线程。然后通过创建这个类的对象并调用其start()方法来启动线程。 public class MyThread extends Thread { public void run() { // 在这里定义线程的执行逻辑 …

低代码开发在医疗健康领域中的应用研究

随着科技的飞速发展,医疗健康领域也在不断接纳新技术。低代码开发作为一种创新性的开发模式,正逐渐改变着医疗行业的软件开发进程。本文将探讨低代码开发在医疗健康领域中的应用及其优势,同时对其可能面临的挑战进行分析,以期为我…

Java—选择排序

选择排序是一种简单但高效的排序算法。它的基本思想是从未排序的部分中选择最小(或最大)的元素,并将其放置在已排序部分的末尾。 实现步骤 具体实现选择排序的步骤如下: 遍历数组:从数组的第一个元素开始&#xff0…

【Python-openslide】openslide.open_slide()

作用: 打开图片 wsi openslide.open_slide(path)注: path: 图片所在路径,需要具体到图片名称(包含扩展名) 我的实验中采用的是svs格式的图像

webpack构建流程

对webpack的理解: webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具 可以使用webpack管理模块 因为在webpack看来,项目中的所有资源皆为模块,通过分析模块间的依赖关系,在其内部构建出一个依赖图,最终编…

SpringBoot3.2更新声明!

1 从 Spring Boot 3.1 升级 1.1 参数名称发现 Spring Boot 3.2 使用的 Spring Framework 版本不再尝试通过解析字节码来推断参数名称。如果您在依赖注入或属性绑定时遇到问题,请务必检查您是否在编译时使用了 -parameters 选项。有关更多详细信息,请参阅 "升级到 Spring…