前段时间,有写过一个小练习《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的更多相关文章

  1. MS SQL读取JSON数据

    前面有一篇<在SQL中直接把查询结果转换为JSON数据>https://www.cnblogs.com/insus/p/10905566.html,是把table转换为json. 现反过来 ...

  2. MS SQL JSON类型type

    在MS SQL Server 2016,已经支持JSON处理. 执行下面代码,将获取ms sql server对象类型以及其说明: IF OBJECT_ID('tempdb.dbo.#json_typ ...

  3. 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 ...

  4. MS SQL巡检系列——检查外键字段是否缺少索引

    前言感想:一时兴起,突然想写一个关于MS SQL的巡检系列方面的文章,因为我觉得这方面的知识分享是有价值,也是非常有意义的.一方面,很多经验不足的人,对于巡检有点茫然,不知道要从哪些方面巡检,另外一方 ...

  5. MS SQL巡检系列——检查重复索引

    前言感想:一时兴起,突然想写一个关于MS SQL的巡检系列方面的文章,因为我觉得这方面的知识分享是有价值,也是非常有意义的.一方面,很多经验不足的人,对于巡检有点茫然,不知道要从哪些方面巡检,另外一方 ...

  6. [MS SQL Server]SQL Server如何开启远程访问

    在日常工作中,经常需要连接到远程的MS SQL Server数据库中.当然也经常会出现下面的连接错误. 解决方法: 1. 设置数据库允许远程连接,数据库实例名-->右键--->属性---C ...

  7. Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码)

    Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码) http://blog.csdn.net/helonsy/article/details/7207497 ...

  8. MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建

    前言 在操作数据库的时候经常会用到判断数据表.视图.函数/方法.存储过程是否存在,若存在,则需要删除后再重新创建.以下是MS SQL Server中的示例代码. 数据表(Table) 创建数据表的时候 ...

  9. MS SQL Server 数据库分离-SQL语句

    前言 今天在在清理数据库,是MS SQL Server,其中用到分离数据库文件.在这过程中,出现了一个小小的问题:误将数据库日志文件删除了,然后数据就打不开了,除了脱机,其他操作都报错. 数据库分离 ...

随机推荐

  1. PWA 学习笔记(三)

    基础技术简介 Promise: 1.ES6 引入的一种异步编程的解决方案,通过 Promise 对象来提供统一的异步状态管理方法 2.一般在使用 Promise 对象的时候,首先需要对其进行实例化 3 ...

  2. Mysql启动&关闭命令

    启动:net start mysql57 关闭:net stop mysql57

  3. Django回顾--配置文件

    """ Django settings for meiduo_mall project. Generated by 'django-admin startproject' ...

  4. Python:将爬取的网页数据写入Excel文件中

    Python:将爬取的网页数据写入Excel文件中 通过网络爬虫爬取信息后,我们一般是将内容存入txt文件或者数据库中,也可以写入Excel文件中,这里介绍关于使用Excel文件保存爬取到的网页数据的 ...

  5. java之简单类对象实例化过程

    假设现在有这么一个类: public class Person{ public Person(){} String name = "tom"; int age = 1; int s ...

  6. idea创建maven工程

    1.右键更目录,new->Module 2.选择Maven,并配置自己的SDK,一般默认的也可以用,点击next进入下一步 3.配置pom文件里的GroupId和Artifactld 4.配置m ...

  7. Java Virtual Machine (JVM), Difference JDK, JRE & JVM – Core Java

    By Chaitanya Singh | Filed Under: Learn Java Java is a high level programming language. A program wr ...

  8. Java入门系列之集合ArrayList源码分析(七)

    前言 上一节我们通过排队类实现了类似ArrayList基本功能,当然还有很多欠缺考虑,只是为了我们学习集合而准备来着,本节我们来看看ArrayList源码中对于常用操作方法是如何进行的,请往下看. A ...

  9. llinux/重启/用户切换/注销

    一.指令 shutdown命令 shutdown -h now //立即关机 shutdown -h 2 //分钟后关机 shutdown -r now //立即重启 shutdown -r 1 // ...

  10. Add a Simple Action添加简单按钮

    In this lesson, you will learn how to create a Simple Action. For this purpose, a new View Controlle ...