首先先来测试数据,数据是使用之前的,就

不要在意这些细节了啊~

借用上一篇的测试数据
create table t1(ID int identity,name nvarchar(50),Chinese int ,Math int)insert into t1 values ('张三',90,80),('李四',75,90),('王五',68,100),('赵六',90,null);

然后我们使用这个表里面生成的json 来进行测试,最简单的例子

declare @v nvarchar(600) = N'[{"ID":1,"name":"张三","Chinese":90,"Math":80},{"ID":2,"name":"李四","Chinese":75,"Math":90},{"ID":3,"name":"王五","Chinese":68,"Math":100},{"ID":4,"name":"赵六","Chinese":100}]'select * from openjson(@v)
with (
ID int '$.ID',
name nvarchar(50) '$.name',
Math int '$.Math',
Chinese int '$.Chinese'
)------------------------
ID          name                                               Math        Chinese
----------- -------------------------------------------------- ----------- -----------
1           张三                                                 80          90
2           李四                                                 90          75
3           王五                                                 100         68
4           赵六                                                 NULL        100

就是最简答的将Json 解析成结果集的形式,如果节点不存在那么赋值则为空

其实也就跟openxml 的用法比较类似

然后用法2 ,可以解析出json 格式里面的格式,当openjson 后面没有加关键字with 的时候,则认为是解析出json本身的结构。比方说(因为使用格式化成文本在这个语句下面有点奇怪,所以就用结果集贴上来,有点乱,大家将就着)

declare @v nvarchar(600) = N'{"ID":1,"name":"张三","Chinese":90,"Math":80}'
select * from openjson(@v)key    value         type
ID           1    2
name        张三    1
Chinese    90    2
Math    80    2

前面2个都好理解,第三个位置,type 。类型,在openjson 的解析里面是这样

0  null

1 string

2 int

3 bool

4 array

5 object

这样就不奇怪刚刚类型那个值的显示了,ID,Math ,Chinese都是整形,姓名是字符串,然后再来一个例子

declare @v nvarchar(600) = N'{"ID":true,"name":null,"Chinese":9.9,"Math":"hello","arr":[1,2,3,4],"obj":{"name":"test"}}'
select * from openjson(@v)key    value     type
ID    true    3
name     NULL    0
Chinese    9.9    2
Math    hello    1
arr    [1,2,3,4]    4
obj    {"name":"test"}    5  

这里就可以看到,即使是9.9这样的类型,使用openjson 也是会认为是整形的,所以即使可以解析出来类型,但是也不要太相信它能给你带来准确的数据类型就对了。
有人可能问,那如果是一个json里面包含多个行对象,其实是可以用openjson with 的格式来解析的,那它怎么认定呢?比如说

declare @v nvarchar(600) = N'[{"ID":1,"name":"张三","Chinese":90,"Math":80},{"ID":2,"name":"李四","Chinese":75,"Math":90},{"ID":3,"name":"王五","Chinese":68,"Math":100},{"ID":4,"name":"赵六","Chinese":100}]'

使用openjson来直接解析,很明显得出,4个列都是Object类型,仅此而已。

一般情况下,用的就是这部分咯~嗯~这次就到这里,下篇再写

转载于:https://www.cnblogs.com/Gin-23333/p/5402859.html

继续说一下2016里面的json功能(1)相关推荐

  1. sql server2016里面的json功能 - 转

    测试一下基本的,从查询结果里面构造一个json 的格式 create table t1(ID int identity,name nvarchar(50),Chinese int ,Math int) ...

  2. 使用go来实现类似erlang otp里面的gen_server功能

    erlang比go要成熟,其中一大原因就是拥有otp工程,进程的管理可以通过专门的行为 模式去处理,例如gen_server,里面包含的6个回调函数init/1, handle_call/3, han ...

  3. pandas读取nlp_chinese_corpus里面的json类型的数据,一行一个字典的数据

    最近在用pandas来读取json类型的数据,发现网上资料居然没查到,我这里弥补一下空缺,读取的json数据示例为: {"qid": "qid_1815059893214 ...

  4. 用c语言 简单实现JAVA里面的ArryList 功能,实现内存自动扩展

    #include<stdio.h> #include<stdlib.h> struct Arr{     int * pbase;//数组首地址     int len;//数 ...

  5. 《Quaternion》自己实现Quaternion里面的FromToRotation功能

    先看代码. /// <summary>/// Handles smaller values better than Unity's version./// </summary> ...

  6. 开启Windows8里面的Hyper-V虚拟机功能

    首先了解下什么是Hyper-V?也就是虚拟化技术,允许终端用户在同一台机器上运行多个操作系统,支持32位和64位系统,可以直接在Windows 8上创建自己的虚拟机.开启Hyper-V虚拟机需要更多的 ...

  7. js中json法创建对象(json里面的:相当于js里面的=)

    js中json法创建对象(json里面的:相当于js里面的=) 一.总结 json里面的:相当于js里面的= 4.json创建js对象解决命名冲突:多个人为同一个页面写js的话,命名冲突就有可能发生, ...

  8. 在package.json里面的script设置环境变量,区分开发及生产环境。注意mac与windows的设置方式不一样...

    在package.json里面的script设置环境变量,区分开发及生产环境. 注意mac与windows的设置方式不一样. "scripts": {"publish-m ...

  9. Win10 如何隐藏控制面板里面的BitLocker 驱动器加密功能

    环境: HP440G4 Win10专业版 问题描述: Win10 如何隐藏控制面板里面的BitLocker 驱动器加密功能 适合Win10和Win11系统,企业管控BitLocker 加密所要用到,隐 ...

最新文章

  1. [Dijstra] 洛谷 P2939 改造路
  2. 【跃迁之路】【658天】程序员高效学习方法论探索系列(实验阶段415-2018.12.02)...
  3. BZOJ 3745: [Coci2015]Norma(分治)
  4. SPList和SPDocumentLibrary 通过代码更新审批状态
  5. java父类shape_java父类为抽象类,子类构造方法传参
  6. 【BZOJ】【4145】【AMPPZ2014】The Prices
  7. python多大孩子可以学_孩子学编程最佳年龄是多大
  8. Varnish 安装部署
  9. 什么软件画er图方便_ER模型怎么画?必备入门级模型图绘制软件
  10. ClearCase Overview
  11. 手机号微信检测方法案例分析
  12. bzoj4568-幸运数字
  13. 我是如何拿到蚂蚁金服实习 offer 的
  14. 顺丰全栈资源下的自动化运维灵魂
  15. 二十一世纪计算|洪小文:帮助机器和人类共同学习
  16. 中国十大悍匪排行榜,屌爆了!!!!
  17. 域名、dns、服务器、IP、主机名(写的好)
  18. PHP + QQ邮箱发送邮箱验证码
  19. MapReduce打包jar包并运行的步骤操作以及重要的注意事项
  20. 多点触摸画板(MultiTouchCanvas)

热门文章

  1. linux执行某个目录的程序
  2. 外卖(food) 洛谷4040宅男计划 三分套二分贪心
  3. MySQL给一个字段递增赋值
  4. XVI Open Cup named after E.V. Pankratiev. GP of Ekaterinburg
  5. 秒杀多线程第十篇 生产者消费者问题 (续)
  6. Intent 传递对象
  7. 获得MFC窗口其它类指针的方法
  8. Creating a Jabber Client using the agsXMPP Library
  9. (四)java B2B2C Springboot仿淘宝电子商城系统技术解决方案
  10. 常州大学阿里云大数据学院举行“创新思维”课程答辩