MS SQL OPENJSON JSON
前段时间,有写过一个小练习《MS SQL读取JSON数据》https://www.cnblogs.com/insus/p/10911739.html
晚上为一个网友的问题,尝试获取较深层节点的数据。
根据网友的原始数据,改写一个相对较简单的json原始数据:

DECLARE @json NVARCHAR(MAX) = N'{"isok":"true",
"stateNumber":"1",
"data":{"ok":true,
"tables":{
"item":[
{"A":"E1","B":"E2","C":"E3"},
{"A":"F1","B":"F2","C":"F3"}
],
"SBU":[
{"ID":"001","QTY":"2000","amount":"189.03"}
]
}
},
"records":"450",
"pcounts":"150",
"nzsum":"真实采购本页总金额:0.00",
"sum":"本页总金额:2140.79",
"zsum":"条件查询总金额:0.00"
}'
Source Code
例子一:获取第一层数据:
DECLARE @Path NVARCHAR(128) = N'$'
DECLARE @SQL NVARCHAR(MAX) = N'SELECT * FROM OPENJSON(N''' + @json + ''', N''' + @Path + ''')'
EXECUTE sp_executesql @Sql DECLARE @SQL1 NVARCHAR(MAX) = N'SELECT * FROM OPENJSON(N''' + @json + ''', N''' + @Path + ''')
WITH
(
[isok] BIT ''$.isok'',
[stateNumber] INT ''$.stateNumber'',
[data] NVARCHAR(MAX) AS JSON,
[records] INT ''$.records'',
[pcounts] INT ''$.pcounts'',
[nzsum] NVARCHAR(100) ''$.nzsum'',
[sum] NVARCHAR(100) ''$.sum'',
[zsum] NVARCHAR(100) ''$.zsum'' )
'
EXECUTE sp_executesql @Sql1
Source Code
例子二:获取第二层数据:

DECLARE @Path NVARCHAR(128) = N'$."data"'
DECLARE @SQL NVARCHAR(MAX) = N'SELECT * FROM OPENJSON(N''' + @json + ''', N''' + @Path + ''')'
EXECUTE sp_executesql @Sql DECLARE @SQL1 NVARCHAR(MAX) = N'SELECT * FROM OPENJSON(N''' + @json + ''', N''' + @Path + ''')
WITH
(
[ok] BIT ''$.ok'',
[tables] NVARCHAR(MAX) AS JSON
)
'
EXECUTE sp_executesql @Sql1
Source Code
例子三:获取第三层数据:
DECLARE @Path NVARCHAR(128) = N'$."data".tables'
DECLARE @SQL NVARCHAR(MAX) = N'SELECT * FROM OPENJSON(N''' + @json + ''', N''' + @Path + ''')'
EXECUTE sp_executesql @Sql DECLARE @SQL1 NVARCHAR(MAX) = N'SELECT * FROM OPENJSON(N''' + @json + ''', N''' + @Path + ''')
WITH
(
[item] NVARCHAR(MAX) AS JSON,
[SBU] NVARCHAR(MAX) AS JSON
)
'
EXECUTE sp_executesql @Sql1
Source Code
例子四:获取第四层数据:

DECLARE @Path NVARCHAR(128) = N'$."data"."tables"."item"'
DECLARE @SQL NVARCHAR(MAX) = N'SELECT * FROM OPENJSON(N''' + @json + ''', N''' + @Path + ''')'
EXECUTE sp_executesql @Sql DECLARE @SQL1 NVARCHAR(MAX) = N'SELECT * FROM OPENJSON(N''' + @json + ''', N''' + @Path + ''')
WITH
(
[A] NVARCHAR(10) ''$.A'',
[B] NVARCHAR(10) ''$.B'',
[C] NVARCHAR(10) ''$.C''
)
'
EXECUTE sp_executesql @Sql1 DECLARE @Path_1 NVARCHAR(128) = N'$."data"."tables"."SBU"' DECLARE @SQL_1 NVARCHAR(MAX) = N'SELECT * FROM OPENJSON(N''' + @json + ''', N''' + @Path_1 + ''')'
EXECUTE sp_executesql @Sql_1 DECLARE @SQL_2 NVARCHAR(MAX) = N'SELECT * FROM OPENJSON(N''' + @json + ''', N''' + @Path_1 + ''')
WITH
(
[ID] NVARCHAR(5) ''$.ID'',
[QTY] DECIMAL(18,2) ''$.QTY'',
[amount] DECIMAL(18,2) ''$.amount''
)
'
EXECUTE sp_executesql @Sql_2
Source Code
MS SQL OPENJSON JSON的更多相关文章
- MS SQL读取JSON数据
前面有一篇<在SQL中直接把查询结果转换为JSON数据>https://www.cnblogs.com/insus/p/10905566.html,是把table转换为json. 现反过来 ...
- MS SQL JSON类型type
在MS SQL Server 2016,已经支持JSON处理. 执行下面代码,将获取ms sql server对象类型以及其说明: IF OBJECT_ID('tempdb.dbo.#json_typ ...
- SQL to JSON Data Modeling with Hackolade
Review: SQL to JSON data modeling First, let’s review, the main way to represent relations in a rela ...
- MS SQL巡检系列——检查外键字段是否缺少索引
前言感想:一时兴起,突然想写一个关于MS SQL的巡检系列方面的文章,因为我觉得这方面的知识分享是有价值,也是非常有意义的.一方面,很多经验不足的人,对于巡检有点茫然,不知道要从哪些方面巡检,另外一方 ...
- MS SQL巡检系列——检查重复索引
前言感想:一时兴起,突然想写一个关于MS SQL的巡检系列方面的文章,因为我觉得这方面的知识分享是有价值,也是非常有意义的.一方面,很多经验不足的人,对于巡检有点茫然,不知道要从哪些方面巡检,另外一方 ...
- [MS SQL Server]SQL Server如何开启远程访问
在日常工作中,经常需要连接到远程的MS SQL Server数据库中.当然也经常会出现下面的连接错误. 解决方法: 1. 设置数据库允许远程连接,数据库实例名-->右键--->属性---C ...
- Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码)
Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码) http://blog.csdn.net/helonsy/article/details/7207497 ...
- MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建
前言 在操作数据库的时候经常会用到判断数据表.视图.函数/方法.存储过程是否存在,若存在,则需要删除后再重新创建.以下是MS SQL Server中的示例代码. 数据表(Table) 创建数据表的时候 ...
- MS SQL Server 数据库分离-SQL语句
前言 今天在在清理数据库,是MS SQL Server,其中用到分离数据库文件.在这过程中,出现了一个小小的问题:误将数据库日志文件删除了,然后数据就打不开了,除了脱机,其他操作都报错. 数据库分离 ...
随机推荐
- react学习之js-xlsx导入和导出excel表格
前记:最近真的挺忙的,一件事接着一件,都忘了我的React项目,尽管这是一个没写概率没写离散的夜晚,我决定还是先做做我的React 好了,进入正题 项目需求,需要导入和导出表单,发现前端已经强大到无所 ...
- 给spark submit main传递参数
https://www.jianshu.com/p/1d41174441b6 注意传递过去的默认是string,如果修改只能在代码中修改
- Linux搭建图片服务器减轻传统服务器的压力(nginx+vsftpd)
传统项目中的图片管理 传统项目中,可以在web项目中添加一个文件夹,来存放上传的图片.例如在工程的根目录WebRoot下创建一个images文件夹.把图片存放在此文件夹中就可以直接使用在工程中引用. ...
- DSP程序中的布尔类型使用
在DSP程序中,布尔类型不能直接拿来用,要定义一下,可以通过定义为枚举类型来定义: typedef enum{FALSE=0,TRUE} BOOL; 一般枚举类型的定义是这样的:enum [枚举名] ...
- Oracle 分页 ROWNUM 两种分页方法和ROWID用法
一 原因一 oracle默认为每个表生成rowmun,rowid字段,这些字段我们称之为伪列 测试表 CREATE TABLE A ( AID NUMBER() primary key, ANAME ...
- Oracle查看 open_cursors 和 session_cached_cursors
本文转自 http://blog.itpub.net/25583515/viewspace-2152997/ 查看当前session已使用的最大open cursor数 和cached cursor数 ...
- reduce方法实现累加累乘的方式
reduce函数对参数序列中的值进行积累,第二个参数可以为:str,tuple,list,代码示例如下: from functools import reduce#实现列表内的所有数的累加,即第一步x ...
- 浅谈python中selenium库调动webdriver驱动浏览器的实现原理
最近学web自动化时用到selenium库,感觉很神奇,遂琢磨了一下,写了点心得. 当我们输入以下三行代码并执行时,会发现新打开了一个浏览器窗口并访问了百度首页,然而这是怎么做到的呢? from se ...
- 《IM开发新手入门一篇就够:从零开发移动端IM》
登录 立即注册 TCP/IP详解 资讯 动态 社区 技术精选 首页 即时通讯网›专项技术区›IM开发新手入门一篇就够:从零开发移动端IM 帖子 打赏 分享 发表评论162 想开 ...
- laravel 5.5.39 升级到 5.5.45 出现 cookie 序列化异常问题的解决
把项目里的 laravel 5.5.39 升级到 5.5.45 后,出现如下报错: ErrorExceptionopenssl_encrypt() expects parameter 1 to be ...