讲师中心 微信公众号
AI工具推荐 视频效率加速

在SQL Server 2022中如何用ISJSON校验输入数据

风磊君_6357

风磊君_6357

发布时间:2026-10-05 08:47:37

|

453人浏览过

|

来源于php中文网

原创

ISJSON在SQL Server 2022中仍为JSON语法校验首选,新增json_type_constraint参数支持VALUE、ARRAY、OBJECT、SCALAR四类类型约束,需按语义精准选用,配合计算列与筛选索引方可保障性能。

在sql server 2022中如何用isjson校验输入数据

ISJSON 在 SQL Server 2022 中仍是校验 JSON 字符串语法合法性的首选函数,但它比旧版本多了类型约束能力——不光能判“是不是 JSON”,还能判“是不是你想要的那类 JSON”。

ISJSON(expression, json_type_constraint) 的 type 参数怎么选

SQL Server 2022 新增的 json_type_constraint 参数支持 VALUE、ARRAY、OBJECT、SCALAR 四种值,选错会导致误判:

  • OBJECT:只认 {...} 开头结尾的结构,{"a":1} 返回 1,[{"a":1}] 返回 0
  • ARRAY:只认 [...],[] 或 [1,"x",{}] 都行,但 {"items":[]} 返回 0
  • SCALAR:专用于校验 RFC 8259 兼容的“纯标量”顶层值,比如 "hello"、42、true、null;注意 'null'(字符串)返回 0,而 null(字面量)返回 1
  • VALUE:最宽泛,覆盖对象、数组、标量三类,等价于不传第二个参数时的行为

常见报错和静默失败场景

ISJSON 不抛异常,但输入类型或内容不对时会返回 0 或 NULL,容易被忽略:

  • 传入 TEXT 或 XML 类型字段会直接报错,必须先 CAST(col AS NVARCHAR(MAX))
  • 带 UTF-8 BOM 的字符串(如以 0xEFBBBF 开头)会被识别为非法字符,返回 0;建议入库前用 REPLACE(LEFT(@s,3), NCHAR(0xFEFF), N'') 清理
  • 空字符串 '' 返回 0,'null'(小写字符串)返回 1,NULL 输入返回 NULL —— CHECK 约束中要额外加 col IS NOT NULL 才能禁 NULL
  • 键名重复、数字溢出(如 999999999999999999999)、控制字符(U+0000)均不会触发错误,ISJSON 只做语法扫描

在存储过程里安全调用 ISJSON 的惯用写法

别等 JSON_VALUE 返回 NULL 才发现问题,校验必须前置:

Feishu calendar sync, local ics to json data for AI agent
Feishu calendar sync, local ics to json data for AI agent

将ICS日历文件转为JSON格式,用于飞书日历导入导出及数据集成。

下载
IF ISJSON(@input) = 0
BEGIN
    RAISERROR('Invalid JSON format in @input', 16, 1);
    RETURN;
END
<p>-- 若需强约束为对象,用:
IF ISJSON(@input, OBJECT) = 0
BEGIN
RAISERROR('Expected JSON object, got %s', 16, 1, @input);
RETURN;
END

注意:不要写 ISJSON(@input) > 0,因为返回 NULL 时整个条件为 UNKNOWN,逻辑失效;必须显式写 = 1 或 = 0。

WHERE 条件中用 ISJSON 的性能陷阱

直接写 WHERE ISJSON(json_col) = 1 无法利用 json_col 上的普通索引,执行计划必是全表扫描:

  • 高频查询场景下,应建计算列:ALTER TABLE logs ADD json_valid AS ISJSON(payload);
  • 再建筛选索引:CREATE INDEX IX_logs_valid_json ON logs(json_valid) WHERE json_valid = 1;
  • WHERE 子句改用 WHERE json_valid = 1 AND ...,才能走索引

真正容易被忽略的是:即使你加了 CHECK 约束,SQL Server 也不会自动为 ISJSON() 表达式建统计信息,优化器对它的选择性预估极不准,所以计算列 + 筛选索引不是可选项,而是必要项。

热门AI工具

更多
墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2015

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2902

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

996

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

3259

2025.09.10

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

4891

2023.08.11

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

80

2026.09.30

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

40

2026.09.30

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

40

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 20.8万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 4.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn