SQLServer2022 ISJSON新特性增强json_type_constraint参数

news/2024/9/24 5:31:56/

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

json_col__JSON__119">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 行受影响)

json_type_constraintVALUE_165">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.ppmy.cn/news/1463862.html

相关文章

机器之心 | 清华接手,YOLOv10问世:性能大幅提升,登上GitHub热榜

本文来源公众号“机器之心”,仅用于学术分享,侵权删,干货满满。 原文链接:清华接手,YOLOv10问世:性能大幅提升,登上GitHub热榜 相同性能情况下,延迟减少 46%,参数减少 2…

5月28号总结

刷题记录 1.A. Phone Desktop 输入: 11 1 1 7 2 12 4 0 3 1 0 8 1 0 0 2 0 15 0 8 2 0 9 输出: 1 1 2 2 1 1 0 1 1 2 5 题意:题目给我们1x1和2x2的图标个数,让我们求最少需要多少个5x3的屏幕。 思路:当只看2x2的图…

MySQL数据库案例实战教程:数据类型、语法与高级查询详解

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

Python代码:十八、生成数字列表

1、描述 牛牛在牛客网系统录入了一连串数字,数字之间依靠逗号隔开,你能帮助他将这些数字存储在列表中吗,列表元素以int的形式。 输入描述: 输入一行整数,数字之间以空格间隔。 输出描述: 输出这些数字…

深度学习500问——Chapter09:图像分割(3)

文章目录 9.8 PSPNet 9.9 DeepLab系列 9.9.1 DeepLabv1 9.9.2 DeepLabv2 9.9.3 DeeoLabv3 9.9.4 DeepLabv3 9.8 PSPNet 场景解析对于无限制的开放词汇和不同场景来说是具有挑战性的。本文使用文中的 pyramid pooling module 实现基于不同区域的上下文集成,提出了PS…

C#中的事件聚合器实现方法

概述:_对象之间的关系_是使代码库难以理解和难以维护的原因。为了更好地理解它,我们求助于马丁福勒(Martin Fowler):事件聚合器是间接的简单元素。在最简单的形式中,您可以让它注册到您感兴趣的所有源对象&…

二十九、openlayers官网示例DeclutterGroup解析——避免矢量图层的文字重叠

官网demo地址: Declutter Group 这篇说的是如何设置矢量图层上多数据点文字不重叠。 主要是属性declutter ,用于处理矢量图层上重叠的标注和符号,为true时启用去重叠功能。所有矢量特征的标注和符号都会被处理以避免重叠。false则与之相反。…

【多态】(超级详细!)

【多态】(超级详细!) 前言一、 多态的概念二、重写1. 方法重写的规则2. 重写和重载的区别 三、多态实现的条件四、 向上转型五、动态绑定 前言 面向对象的三大特征:封装性、继承性、多态性。 extends继承或者implements实现&…