下面是 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 数据相关推荐

  1. 如何删除sql server中的重复数据

    如何删除sql server中的重复数据 先来看下有多少重复数据,伪代码如下: select count(重复字段)-count(distinct 重复字段) from 表名 执行这个SQL伪代码候就 ...

  2. 从TXT文本文档向Sql Server中批量导入数据

    因为工作的需要,近期在做数据的分析和数据的迁移.在做数据迁移的时候需要将原有的数据导入到新建的数据库中.本来这个单纯的数据导入导出是没有什么问题的,但是客户原有的数据全部都是存在.dat文件中的.所以 ...

  3. .SQL Server中 image类型数据的比较

    在SQL Server中如果你对text.ntext或者image数据类型的数据进行比较.将会提示:不能比较或排序 text.ntext 和 image 数据类型,除非使用 IS NULL 或 LIK ...

  4. 如何对SQL Server中的XML数据进行insert、update、delete .

    SQL Server 2005/2008增加了对XML数据的支持,同时也新增了几种操作XML的方法,本文主要以SQL Server 2008为例介绍如何对XML数据进行insert.update.de ...

  5. SQL Server中的动态数据屏蔽

    Security has been one of the prime concerns of database developers since the inception of database m ...

  6. 了解SQL Server中的倾斜数据

    介绍 (Introduction) I recently did some research to analyze skewed data distribution in SQL Server. Th ...

  7. SQL Server中,备份数据表

    SQL Server中,需要备份数据表及备份表中的数据方法: 执行SQL:select * into 新表名(备份表名) from 原表名 where ···(可以加或不加条件) 上述SQL中,新表名 ...

  8. SQL Server中删除重复数据的2个方法

    要求: 用SQL语句实现删除一个表里面的重复数据,但要留下一条相同的数据. 思路: 需要两条,一条是进行重复数据标示,将重复数据中随机的一条标注为1其它的标注为0:然后还有一条语句删除所有的标注为1的 ...

  9. SQL Server中删除重复数据的几个方法

    数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置-- 方法一 declare @max integer,@id integer declare cur ...

最新文章

  1. 一. 对spring boot认识
  2. AWS — AWS Outposts
  3. python画决策树如何避免太多内容重叠在一起_Python手写决策树并应对过度拟合问题...
  4. Windows下安装maven-nexus私服
  5. 删除文件时,提示没权限删除文件怎么办
  6. 16x16x16 4096个RGB LED的光立方是一种怎样的神奇效果?视频展示制作全过程
  7. 17joys网站后台功能设计-阶段1
  8. 【数据结构基础】【散列表】
  9. P1099 树网的核
  10. Spring4.x(12)--SpringEL-HelloWorld
  11. 前端调用后端接口 xhr 只看到一次 实际调用两次_持续演进的接口自动化测试方案...
  12. 基于 opencv图像去噪
  13. c语言 牛逼代码,有c语言牛逼的神人吗
  14. NLP中文常用停用词表
  15. android 夜间模式源码,Android Support Library 之 夜间模式
  16. 微信小程序、苹果手机(ios)时间格式显示NAN.....(已解决)
  17. thingsboard
  18. 中科易朔CASfire 分析中心
  19. Android计时常用的7种方式
  20. 【RFC2663 IP 网络地址转换器 (NAT) 术语和注意事项】(翻译)

热门文章

  1. MySQL配置大小写敏感报错_mysql表名大小写敏感 - xbuding: watch and learn! - OSCHINA - 中文开源技术交流社区...
  2. 三维点云学习(3)2- K-Means
  3. [黑金原创教程][连载][iBoard 电子学堂][第〇卷 电子基础]第一篇 认识电子元器件...
  4. DI(数据集成)前瞻调查
  5. cin、cin.get()、cin.getline()、getline()、gets()等函数的用法 (转)
  6. Flex之使用DragManager实现对象拖动
  7. android binder机制分析 以MediaPlayer为例子
  8. 频数直方图的步骤_如何运用QC七大手法和九大步骤分析问题?
  9. 二进制包如何知道go 版本_你有同时使用多版本 Go 语言的需求吗,那就快使用多版本管理利器 GVM 吧!...
  10. mysql_fetch_array详解