设为首页 收藏本站
查看: 923|回复: 0

[经验分享] 在Sql Server 2016中使用For Json子句把数据作为json格式导出

[复制链接]

尚未签到

发表于 2018-10-22 07:27:16 | 显示全部楼层 |阅读模式
  原文地址:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/export-query-result-as-json-format-in-sql-server-2016/
  使用for json子句把查询结果作为json字符串导出,将作为sql server 2016中首先可用的一个特性。如果你熟悉for xml子句,那么将很容易理解for json:
select ccolumn, expression, column as alias  
    from table1, table2, table3    for json [auto | path]
  如果你把for json子句添加到T-SQL Select查询语句的最后,SQL Server将会把结果格式化为JSON字符串之后在返回到客户端。每一行数据将会格式化为一个json对象,每一个数据字段将会成为行对象的值,列名或者列的别名会作为行对象的键。我们有两种类型的for json子句:

  •   FOR JSON Path,通过列名或者列别名来定义JSON对象的层次结构,列别名中可以包含“.”,JSON的成员层次结构将会与别名中的层次结构保持一致。
      这个特性非常类似于早期SQL Server版本中的For Xml Path子句,可以使用斜线来定义xml的层次结构。
  •   FOR JSON Auto,自动按照查询语句中使用的表结构来创建嵌套的JSON子数组,类似于For Xml Auto特性。
  如果你用过PostgreSQL中涉及到JSON的函数和操作符,你会注意到,FOR JSON子句类等价于PostgreSQL中的JSON创建函数比如row_to_json或json_object。FOR JSON子句的主要目的是根据JSON规范把变量、列格式化为JSON对象。比如:
set @json = (select 1 as firstKey, getdate() as dateKey, @someVar as thirdKey for json path)-- result is : {"firstKey": 1, "dateKey": "2016-06-15 11:35:21", "thirdKey": "Content of variable"}  FOR JSON子句主要应用场景:



    •   把需要返回给客户端的一组对象序列化为JSON。想象一下,在你创建JSON Web服务的时候,需要提供供应商信息及其产品信息(比如在OData服务中使用$extend选项)。你可能会查询供应商列表,把每个供应商信息格式化为JSON对象并通过额外查询来获得这个供应商的产品列表,将其转化为JSON对象数组附加到供应商对象。其他方案可能会通过链接查询来获得供应商和产品信息列表,使用客户端代码来格式化为JSON对象(若使用Entity Framework将可能产生额外查询)。使用for json子句,你可以连接这两个表进行查询,添加你想要的前缀(定义JSON层次结构),在数据库层完成JSON格式化工作。
    •   在一对多的父子表关系场景,你不想创建子表,而是想把子表的记录以JSON数组的格式存储作为父表的一列。比如你不想把SalesOrderHeader和SalesOrderDetails数据分成两个表来保存,你可以把每个订单的多个商品详情格式化为JSON数组保存到SalesOrderHeader表中的一列。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-624687-1-1.html 上篇帖子: sql turning advise的使用 下篇帖子: sql练习语句
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表