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

怎么在SQL Server 2016中直接查询JSON数据?

云丽小哥_1326

云丽小哥_1326

发布时间:2026-09-15 07:50:16

|

823人浏览过

|

来源于php中文网

原创

SQL Server中处理JSON必须用JSON_VALUE提取标量值或OPENJSON解析数组/对象;前者路径须以$开头、返回NULL不报错,后者需WITH子句定义结构;索引优化须通过PERSISTED计算列实现。

怎么在sql server 2016中直接查询json数据?

直接查 JSON 字段,必须用 JSON_VALUEOPENJSON,不能用 WHERE column = 'xxx' 这种普通方式——SQL Server 不会自动解析字符串里的 JSON 结构。

JSON_VALUE 提取单个标量值(最常用)

适用于从 JSON 字符串里取一个字段,比如 "name""id" 或嵌套路径如 "address.city"。它只返回字符串、数字、布尔或 null,不支持数组或对象。

  • JSON_VALUE 第二个参数是 JSON 路径表达式,必须以 $ 开头,比如 '$.name''$.skills[0]'
  • 如果路径不存在或 JSON 无效,返回 NULL(不是报错),所以 WHERE 条件里要小心空值漏判
  • 不能用于超过 4000 字符的 JSON 字符串做索引查找——因为内部会截断,建议字段类型用 nvarchar(4000) 存短 JSON,长的才用 nvarchar(max)
  • 示例:SELECT id, JSON_VALUE(doc, '$.name') AS name FROM Families WHERE JSON_VALUE(doc, '$.isRegistered') = 'true'

OPENJSON 配合 WITH 解析整个 JSON 对象或数组

当你需要把 JSON 数组展开成行,或一次性提取多个字段(尤其顶层是数组时),OPENJSON 是唯一可靠选择。它本质是把 JSON 变成一张临时表。

jm-jsjkxyjs02-pzl-803
jm-jsjkxyjs02-pzl-803

查询全球任意城市的实时天气和未来天气预报

下载
  • 必须配合 WITH 子句定义列名和类型,否则返回的是键/值对的通用结构,没法直接过滤
  • 路径表达式在 WITH 里写,比如 name NVARCHAR(50) '$.name',不加 $ 前缀也能工作,但显式写更清晰
  • 如果原始 JSON 是数组(如 [{"a":1},{"a":2}]),OPENJSON 默认按元素展开;如果是单个对象({"a":1}),需加 AS JSON 或用 JSON_QUERY 包一层再进
  • 示例:SELECT f.id, j.name, j.grade FROM Families f CROSS APPLY OPENJSON(f.doc) WITH (name NVARCHAR(50), grade INT) AS j WHERE j.grade > 5

ISJSON + 索引让查询变快

直接在 JSON 字段上建索引是无效的。想加速 JSON_VALUE 查询,得用「计算列 + 持久化 + 索引」三步走。

  • 先加计算列:ALTER TABLE Families ADD name_computed AS JSON_VALUE(doc, '$.name') PERSISTED
  • 再建索引:CREATE INDEX IX_Families_name ON Families(name_computed)
  • 注意:计算列必须 PERSISTED 才能索引;且 ISJSON(doc) > 0 应该作为 CHECK 约束加上,避免无效 JSON 污染计算列结果
  • 兼容性级别必须 ≥ 130(SQL Server 2016 默认就是,但老数据库升级后可能没改)

别踩这些坑

常见报错或静默失败,基本都出在这几处:

  • 字段类型用了 textvarchar:JSON 函数只认 nvarchar(含 nvarchar(max)),text 已废弃且不支持
  • 路径写错但没报错:比如写成 '$..name'(双点是 XPath 风格,SQL Server 不支持),实际要用 '$.name';数组下标越界也只返回 NULL,容易误判为数据缺失
  • WHERE 中混用 JSON 和非 JSON 字段:比如 WHERE JSON_VALUE(doc, '$.id') = id,如果 docid 是字符串而表中 id 是 int,隐式转换会失败,最好显式转类型
  • 忘了 ISJSON 校验:如果业务允许往 JSON 字段插任意字符串,JSON_VALUE 在无效 JSON 上始终返回 NULL,WHERE 条件可能意外匹配所有坏数据

真正麻烦的不是语法,而是 JSON 字段里结构不一致——有人存 {"name":"a"},有人存 [{"name":"a"}],同一字段混合类型会让 OPENJSON 展开逻辑变得脆弱。上线前最好用 ISJSON 扫一遍数据分布。

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

DeepSeek

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

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

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

WorkBuddy

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

豆包大模型

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

相关专题

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

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

1955

2023.08.07

json是什么
json是什么

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

2602

2023.08.23

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

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

896

2023.10.13

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

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

2919

2025.09.10

sqlserver和mysql区别
sqlserver和mysql区别

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

4371

2023.08.11

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

0

2026.09.22

Conan二进制包配置指南
Conan二进制包配置指南

本专题介绍Conan根据操作系统、编译器、架构和构建类型生成二进制包的方法,讲解Profile、Settings、Options及Package ID的作用,帮助管理不同平台和编译环境下的包版本。

0

2026.09.22

Conan私有仓库搭建教程
Conan私有仓库搭建教程

本专题系统的讲解Conan私有仓库的搭建流程,涵盖仓库服务部署、存储目录配置、用户认证、权限划分和远程地址添加,并介绍内部C++依赖包的上传、下载及版本维护方法。

0

2026.09.22

loomy官网入口地址合集
loomy官网入口地址合集

本专题汇总了 Loomy 桌面 AI 助理的官方入口地址合集及使用指南。提供 macOS 与 Windows 客户端下载 。Loomy 是讯飞推出的桌面级 AI 工作搭子,支持文件整理、数据分析、网页操作及通过飞书/钉钉远程操控电脑,助你高效完成本地办公任务 。

0

2026.09.22

热门下载

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

精品课程

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

共101课时 | 20.5万人学习

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

共39课时 | 4.7万人学习

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

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