SQL Server 2016原生支持JSON
转载原地址: http://www.cnblogs.com/lyhabc/p/4747694.html
SQL Server 2005 开始支持 XML 数据类型,提供原生的 XML数据类型、XML 索引以及各种管理 XML 或输出 XML 格式的函数。
在 SQL Server 时隔 4 个主要版本之后,终于在 Microsoft Ignite 2015 大会上正式宣布,新一代的 SQL Server 2016 正式支持现在最流行的数据交换格式— JSON(JavaScript Object Notation)。
SQL Server 2016 对JSON的支持并不是增加一个JSON数据类型,而是提供一个更轻便的框架,帮助用户在数据库里处理JSON格式数据。
用户不需要更变现有的表结构,因为SQL Server使用NVARCHAR 数据类型来存储JSON文件,并且跟现有技术相互兼容,比如全文搜索、列存储索引、in-memory OLTP,应用程序不需要做任何修改
不需要使用JSON.Net这类工具分析和处理JSON数据,利用SQL Server内置函数就可以处理JSON数据,轻松将查询结构输出为JSON格式,或者搜索JSON文件内容。
使用 JSON AUTO 输出JSON 格式
要将select语句的结果以JSON输出,最简单的方法是在后面加上 FOR JSON AUTO
测试版本
Microsoft SQL Server 2016 (CTP2.2) - 13.0.407.1 (X64) Jul 22 2015 21:19:11 Copyright (c) Microsoft Corporation Enterprise Evaluation Edition (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9
600: ) (Hypervisor)
SELECT * FROM [dbo].[Client]
GO SELECT * FROM [dbo].[Client] FOR JSON AUTO
GO
我们可以把每列中显示的最大字符数 设置为8192

加上Root Key
如果想为FOR JSON 加上Root Key,可以使用ROOT选项来指定 Root Key 名称
SELECT * FROM [dbo].[Client] FOR JSON AUTO,ROOT('SUSU')
GO

使用JSON PATH 输出JSON格式
当想要自定义输出JSON格式结构的时候,必须用JSON PATH描述,若SELECT 的字段名称相同,必须用别名方式来重新命名字段名这样才可以继续查询
另外,如果字段的默认值为NULL,那么输出JSON时,JSON会忽略null的只。如果要显示null值,可以加上INCLUDE_NULL_VALUES 选项(同样适用于JSON AUTO字句)
select * from [dbo].[Client] --FOR JSON PATH
SELECT * FROM [dbo].[Client] WHERE ClientID =2
FOR JSON PATH [{"ClientID":2,"Firstname":"Peter","Lastname":"Nielsen","Birthdate":"1998-05-19T00:00:00","Email":"Peter@126.com","PhoneNumber":"+86-16326269674","Birthplace":"Stockholm","SocialSecurityNumber":"1901531234"}] --FOR JSON PATH
SELECT * FROM [dbo].[Client] WHERE ClientID =4
FOR JSON PATH,INCLUDE_NULL_VALUES [{"ClientID":4,"Firstname":"kade","Lastname":null,"Birthdate":"1980-01-06T00:00:00","Email":"Lotte@SOHU.com","PhoneNumber":"+86-16326269674","Birthplace":"Aalborg","SocialSecurityNumber":"1061234"}]

更多关于JSON的功能
目前SQL Server 2016 CTP2 对于JSON的功能支持还是比较有限,例如内置处理JSON格式化的函数,
ISJSON(判断是否是JSON格式)、JSON_VALUE(分析JSON文件并提取出值) 、OPENJSON(将JSON文件转换为普通数据表)
这些功能要等到CTP3才能陆续推出
在数据库层对JSON提供支持,是请求排名最靠前的特性之一,在Microsoft Connect网站上对他的投票量超过了1000。微软承诺,在Sql Server 2016版本中,会提供内置的JSON支持。注意这并不是Sql Server 2005已有特性XML原生支持的翻版。微软的目标是创建一个简单好用的框架来处理JSON文档。本文中,我将描述SQL Server 2016中计划实现的JSON特性。特性支持时间表如下:
- SQL Server 2016 CTP2 - 能够把数据格式化为JSON导出,关于该特性的详细信息情参阅博文。
- SQL Server 2016 CTP3 - 能够加载JSON字符串并解析为表变量,能够提取JSON节点的值,对JSON列设置索引属性。
JSON 数据的存储形式
首先我们要搞明白的是,内置JSON支持并不等于原生JSON类型。在SQL Server 2016中,JSON数据将会使用NVARCHAR类型存储,原因如下:
- 可迁移性 - 我们发现人们已经开始使用字符串来表示JSON数据,如果引入新的JSON类型,人们不得不改变数据库架构,并且使用新的特性来重新载入数据。
- 特性兼容性 - NVARCHAR数据类型已经被SQL Server的各个组件广泛支持,这样JSON也就被这些组件支持。你可以把JSON放进Hekaton,Temporal或者column store表中,应用行级别的权限控制等安全策略,使用B-Tree和FTS索引,把JSON作为存储过程或用户自定义函数的参数与返回值等。你无需考虑JSON是否与某个特性X兼容,因为只要NVARCHAR与特性X兼容,那么JSON也就兼容。此外也有一些限制,由于Hekaton和column store不支持LOB值,因此你职能保存小型JSON文档,但是,一旦我们为Hekaton和column store添加了对LOB的支持那么你就能够把JSON文档存储在任意地方了。
- 客户端代码兼容性 - 当前在客户端应用中我们还没有标准的JSON对象类型(向XmlDom对象)。网页、移动端和JavaScript应用使用内置的解析器把JSON文本转化为对象。在JavaScript中使用object来表示JSON数据,不可能为少数关系型数据库内建JSON 类型提供一个代理类型。在C#.Net中,大量开发者使用JSON.net解析器和内建的JObject、JArray类型;但是这些不是标准方案,且可能不会被纳入ADO.NET,所以C#应用从数据库得到纯文本JSON后使用自己喜欢的解析器进行处理。
注意你仍然可以使用自己的能通过CLR实现的JSON类型,引入JSON.NET或其他相似的库。即使你不喜欢编码实现CLR用户自定义类型,也可以下载大量现成的实现,这样你不需要注意原生JSON类型和用户自定义JSON类型之间的差异。只要对于大多数.Net应用来说足够快就可以了。如果你觉得PostgreSQL的JSONB格式或则zipped JSON text等压缩格式更好,那么你可以通过UDT来使用他们, 可以创建成员方法来利用那种格式的属性。当前我们还没有发现有谁在尝试使用UDT来封装JSONB格式,因此,在Sql Server 2016中不考虑JSONB格式。
我们的焦点在于提供更好的函数和更优的查询性能,而不在于节约存储空间。我们知道在PostgreSQL中有原生JSON类型和对JSONB的支持,但是我们不确定其性能与CLR方式相比是否更有优势,所以,在SQL Server 2016中,我们决定关注于其他更重要的方面(你希望看到在SQL Server中有原生的JSON类却没有相关的内建函数吗?我想答案是否定的)。但是,我们会在社区中与大家讨论,是否大家认为使用原生的JSON类型比CRL JSON或则文本JSON更好,你可以在Microsoft Connect网站上创建话题与我们讨论。我们决定首先实现FOR JSON和OPENJSON还由于该特性是大量用户都需要的,并且通过CLR难以实现。
因此,我们的关注重点是导出/导入遗迹一些内建的JSON处理函数。有人可能会说这些函数的性能还不够快。我们的策略是先提供一个可用的实现,再来持续优化其性能。但是,在数据库层内建JSON解析器时处理JSON最快的手段。你可以使用CRL类型或者CLR解析器作为外部库但是它的性能不会比原生代码解析JSON更快。
SQL Server 2016原生支持JSON的更多相关文章
- SQL Server2016 原生支持JSON
SQL Server2016 原生支持JSON SQL Server 2005 开始支持 XML 数据类型,提供原生的 XML数据类型.XML 索引以及各种管理 XML 或输出 XML 格式的函数. ...
- 数据库技术丛书:SQL Server 2016 从入门到实战(视频教学版) PDF
1:书籍下载方式: SQL Server2016从入门到实战 PDF 下载 链接:https://pan.baidu.com/s/1sWZjdud4RosPyg8sUBaqsQ 密码:8z7w 学习 ...
- SQL Server 2016新特性: 对JSON的支持
SQL Server 2005开始支持XML数据类型,提供原生的XML数据类型.XML索引及各种管理或输出XML格式的函数.随着JSON的流行,SQL Server2016开始支持JSON数据类 ...
- sql server 2016 JSON 学习笔记
虽然现在win服务器已经几乎不用了,但是网上看到2016开始原生支持json 还是想试试 建立一个表 id int , json varchar(2000) json字段中输入数据 {"r ...
- SQL Server 2016 CTP2.2 的关键特性
SQL Server 2016 CTP2.2 的关键特性 正如微软CEO 说的,SQL Server2016 是一个Breakthrough Flagship Database(突破性的旗舰级数据库 ...
- SQL Server 2016最值得关注的10大新特性
全程加密技术(Always Encrypted) 全程加密技术(Always Encrypted)支持在SQL Server中保持数据加密,只有调用SQL Server的应用才能访问加密数据.该功能支 ...
- SQL Server 2016 特性和安装方法
SQL Server 2016 特性: 全程加密技术(Always Encrypted),动态数据屏蔽(Dynamic Data Masking),JSON支持,多TempDB数据库文件,PolyBa ...
- SQL Server 2016 ->> T-SQL新特性
1) TRUNCATE表分区而不是整表 CREATE TABLE dbo.TruncatePartitionTest ( PrtCol INT, Col2 ) ) ON [myPS1](PrtCol) ...
- 微软发布正式版SQL Server 2016
微软于今天在SQL 官方博客上宣布 SQL Server 数据库软件的正式发布版本(GA),历时一年多,微软为该软件发布了多个公共预览版和候选版本,而今天最终版本终于上线了.在博客中,微软数据集团的企 ...
随机推荐
- Posix IPC
- windows8.1下安装.NET Framework 3.5
今天安装Arcgis10.2提示需要安装.NET Framework 3.5.校园网的网速,你懂的.所以,在线安装不太现实. 在线安装方法: 如何在 Windows 8 上安装 .NET Framew ...
- Autodesk 2015全套密钥
Below is a list for collecting all the Autodesk 2015 Product Keys: [*]AutoCAD 2015 001G1 [ ...
- WPF之给使用了模板的MenuItem添加快捷操作
说在前面: WPF中给按钮或者是具备Command等元素实现快捷键其实是非常简单的,例子如下: <Button Content="_Test" Click="But ...
- svn:revert to this version 和 revert changes from this version的区别 假设我们有许多个版本,版本号分别是1-10
假设我们有许多个版本,版本号分别是1-10 如果我们在7这里选择revert to this version那么7之后的8,9,10的操作都会被消除 如果在7选择revert changes from ...
- cisco vpn client for win10 x64 setup package
win10 x64安装cisco vpn client报错,解决方法如下: 1.卸载以前安装的所有cisco vpn client,并重启电脑. 2.运行winfix.exe 3.安装Global V ...
- bzoj1025: [SCOI2009] 游戏 6
DP. 每种排法的长度对应所有循环节长度的最小公倍数. 所以排法总数为和为n的几个数的最小公倍数的总数. #include<cstdio> #include<algorithm> ...
- OWIN katana注册中间件的几种写法
首先特别说明下在startup中注册完中间件的两个注意事项,看到有人写的东西有误导人的作用.关于startup启动发现类的内容,参照这里 http://www.asp.net/aspnet/overv ...
- 各种好用的工具之一 ---- PNGGauntlet
1.PNGGauntlet实际上是一个图形前端,压缩图像的过程中使用的是PNGOUT, OptiPNG, 和DeflOpt这三款软件. 软件官网:http://pnggauntlet.com/ 可自行 ...
- geetoo编译安装
关于Gentoo发行版的介绍请看:全球最受欢迎的十大Linux发行版(图) Host机环境:Win2008 + VMware 7.1 下载安装包 下载安装 CD 和 stage3 包: http:// ...