SQL Server 中的 JSON 数据
下面是 JSON 文本的示例
[{
"name": "John",
"skills": ["SQL", "C#", "Azure"]
}, {
"name": "Jane",
"surname": "Doe"
}]
通过使用 SQL Server 内置函数和运算符,你可以对 JSON 文本执行以下操作:
- 分析 JSON 文本和读取或修改值。
- 将 JSON 对象数组转换为表格式。
- 在转换后的 JSON 对象上运行任意 Transact-SQL 查询。
- 将 Transact-SQL 查询的结果设置为 JSON 格式。
在以下示例中,查询同时使用表中的关系数据和 JSON 数据(存储在名为 jsonCol
的列中):
SELECT Name,Surname,
JSON_VALUE(jsonCol,'$.info.address.PostCode') AS PostCode,
JSON_VALUE(jsonCol,'$.info.address."Address Line 1"')+' '
+JSON_VALUE(jsonCol,'$.info.address."Address Line 2"') AS Address,
JSON_QUERY(jsonCol,'$.info.skills') AS Skills
FROM People
WHERE ISJSON(jsonCol)>0
AND JSON_VALUE(jsonCol,'$.info.address.Town')='Belgrade'
AND Status='Active'
ORDER BY JSON_VALUE(jsonCol,'$.info.address.PostCode')
将 JSON 集合转换为行集
在 SQL Server 中查询 JSON 不需要自定义查询语言。 可以使用标准的 T-SQL 查询 JSON 数据。 如果必须基于 JSON 数据创建查询或报表,可以通过调用 OPENJSON 行集函数,轻松地将 JSON 数据转换为行与列 。 有关详细信息,请参阅用 OPENJSON 将 JSON 数据转换为行和列 (SQL Server)。
以下示例调用 OPENJSON,并且将 @json
变量中存储的对象数组转换为可使用标准 SQL SELECT 语句查询的行集 :
DECLARE @json NVARCHAR(MAX)
SET @json =
N'[
{ "id" : 2,"info": { "name": "John", "surname": "Smith" }, "age": 25 },
{ "id" : 5,"info": { "name": "Jane", "surname": "Smith" }, "dob": "2005-11-04T12:00:00" }
]'
SELECT *
FROM OPENJSON(@json)
WITH (id int 'strict $.id',
firstName nvarchar(50) '$.info.name', lastName nvarchar(50) '$.info.surname',
age int, dateOfBirth datetime2 '$.dob')
OPENJSON 将 JSON 对象的数组转换为表,其中每个对象表示为一行,键/值对将作为单元返回。 输出遵循下列规则:
- OPENJSON 将 JSON 值转换为 WITH 子句中指定的类型 。
- OPENJSON 可以处理规则的键/值对以及分层组织的对象。
- 不需要返回 JSON 文本中包含的所有字段。
- 如果 JSON 值不存在,OPENJSON 返回 NULL 值。
- 可以选择在类型规范后指定一个路径,以引用嵌套属性或按不同的名称引用属性。
- 路径中可选的 strict 前缀指定 JSON 文本中必须存在指定属性的值。
SELECT id, firstName AS "info.name", lastName AS "info.surname", age, dateOfBirth as dob
FROM People
FOR JSON PATH
应用程序池:” FOR JSON 子句将 SQL 结果的格式设置为 JSON 文本,该格式可提供给识别 JSON 的任何应用。 PATH 选项在 SELECT 子句中使用以点分隔的别名,以嵌套查询结果中的对象。
[{
"id": 2,
"info": {
"name": "John",
"surname": "Smith"
},
"age": 25
}, {
"id": 5,
"info": {
"name": "Jane",
"surname": "Smith"
},
"dob": "2005-11-04T12:00:00"
}]
转载于:https://www.cnblogs.com/PerfectBeauty/p/11093093.html
SQL Server 中的 JSON 数据相关推荐
- 如何删除sql server中的重复数据
如何删除sql server中的重复数据 先来看下有多少重复数据,伪代码如下: select count(重复字段)-count(distinct 重复字段) from 表名 执行这个SQL伪代码候就 ...
- 从TXT文本文档向Sql Server中批量导入数据
因为工作的需要,近期在做数据的分析和数据的迁移.在做数据迁移的时候需要将原有的数据导入到新建的数据库中.本来这个单纯的数据导入导出是没有什么问题的,但是客户原有的数据全部都是存在.dat文件中的.所以 ...
- .SQL Server中 image类型数据的比较
在SQL Server中如果你对text.ntext或者image数据类型的数据进行比较.将会提示:不能比较或排序 text.ntext 和 image 数据类型,除非使用 IS NULL 或 LIK ...
- 如何对SQL Server中的XML数据进行insert、update、delete .
SQL Server 2005/2008增加了对XML数据的支持,同时也新增了几种操作XML的方法,本文主要以SQL Server 2008为例介绍如何对XML数据进行insert.update.de ...
- SQL Server中的动态数据屏蔽
Security has been one of the prime concerns of database developers since the inception of database m ...
- 了解SQL Server中的倾斜数据
介绍 (Introduction) I recently did some research to analyze skewed data distribution in SQL Server. Th ...
- SQL Server中,备份数据表
SQL Server中,需要备份数据表及备份表中的数据方法: 执行SQL:select * into 新表名(备份表名) from 原表名 where ···(可以加或不加条件) 上述SQL中,新表名 ...
- SQL Server中删除重复数据的2个方法
要求: 用SQL语句实现删除一个表里面的重复数据,但要留下一条相同的数据. 思路: 需要两条,一条是进行重复数据标示,将重复数据中随机的一条标注为1其它的标注为0:然后还有一条语句删除所有的标注为1的 ...
- SQL Server中删除重复数据的几个方法
数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置-- 方法一 declare @max integer,@id integer declare cur ...
最新文章
- 一. 对spring boot认识
- AWS — AWS Outposts
- python画决策树如何避免太多内容重叠在一起_Python手写决策树并应对过度拟合问题...
- Windows下安装maven-nexus私服
- 删除文件时,提示没权限删除文件怎么办
- 16x16x16 4096个RGB LED的光立方是一种怎样的神奇效果?视频展示制作全过程
- 17joys网站后台功能设计-阶段1
- 【数据结构基础】【散列表】
- P1099 树网的核
- Spring4.x(12)--SpringEL-HelloWorld
- 前端调用后端接口 xhr 只看到一次 实际调用两次_持续演进的接口自动化测试方案...
- 基于 opencv图像去噪
- c语言 牛逼代码,有c语言牛逼的神人吗
- NLP中文常用停用词表
- android 夜间模式源码,Android Support Library 之 夜间模式
- 微信小程序、苹果手机(ios)时间格式显示NAN.....(已解决)
- thingsboard
- 中科易朔CASfire 分析中心
- Android计时常用的7种方式
- 【RFC2663 IP 网络地址转换器 (NAT) 术语和注意事项】(翻译)
热门文章
- MySQL配置大小写敏感报错_mysql表名大小写敏感 - xbuding: watch and learn! - OSCHINA - 中文开源技术交流社区...
- 三维点云学习(3)2- K-Means
- [黑金原创教程][连载][iBoard 电子学堂][第〇卷 电子基础]第一篇 认识电子元器件...
- DI(数据集成)前瞻调查
- cin、cin.get()、cin.getline()、getline()、gets()等函数的用法 (转)
- Flex之使用DragManager实现对象拖动
- android binder机制分析 以MediaPlayer为例子
- 频数直方图的步骤_如何运用QC七大手法和九大步骤分析问题?
- 二进制包如何知道go 版本_你有同时使用多版本 Go 语言的需求吗,那就快使用多版本管理利器 GVM 吧!...
- mysql_fetch_array详解