FOR XML PATH 方法是用于将查询结果集以XML形式展示,这样展示方式的好处不言而喻。现在我要介绍的FOR XML PATH的“另类”用法。

首先,我们先来看看它的正常用法。下图是我们用到的一张TEST_PERSON表:

用FOR XML PATH方法查询,SQL语句如下:

SELECT * FROM TEST_PERSON FOR XML PATH

显示结果如下:

展开结果可以看到如下图:

神奇吧!!!!细心的同学会注意到这个XML文件的行节点是<row>,如果需求需要改变这个行节点为<animal>,怎么改?看下面的SQL语句你就会知道了。

SELECT * FROM TEST_PERSON FOR XML PATH('animal')

展开结果如下图:

简单吧!!!有野心的同学就会说了:既然行节点可以改变,那列节点要改变又该怎么操作呢?很简单,只要给字段加别名。SQL语句如下:

SELECT ID AS XuHao,NAME AS MyName FROM TEST_PERSON FOR XML PATH('animal')

展开结果如下:

好玩吧!!!古怪的同学就想了:既然行和列都可以自定义,那么是否说我们可以定义我们喜欢的输出方式呢?!(我们要说的重点就是这)

看如下SQL语句:

SELECT '['+NAME+']' +'    'FROM TEST_PERSON FOR XML PATH('')

展示结果如下:

说了这么多,好像只是为了好玩。那么有哪些实际的应用场景中可以用到这个技术呢?

例如:要查询一个订单信息,这些信息包括(订单号+费用名称+...),而费用我们是存在单独的一个子表中,且一个订单不只一笔费用。

接下来我们增加个动物的行为表TEST_HOBBY表,用演示以上效果。TEST_HOBBY表如下:

我们查动物信息(动物名字+动物行为),动物行为存在TEST_HOBBY表中,我们通过ID 关联,并且一个动物存在多种行为。SQL语句如下:

 SELECT
PE.NAME,--取出TEST_PERSON表中的NAME字段
--通过ID关联到TEST_HOBBY表,并把这表中各种动物的行为拼接为一个字段返回
(SELECT ' '+HO.HOBBY_NAME+' ' FROM TEST_HOBBY HO WHERE HO.PARENT_ID=PE.ID FOR XML PATH('')) AS HOBBY
FROM TEST_PERSON PE

结果展示如下:

好玩吧,O(∩_∩)O哈哈~

更多知识可以参考: http://msdn.microsoft.com/zh-cn/library/ms189885.aspx

(今天写存储过程时用到了FOR XML PATH方法,所以整理一下FOR XML PATH的知识。)

 

原文地址:

最新文章

  1. jQueryAjax笔记
  2. mysql 函数(二)
  3. maven pom文件结构详解
  4. MAC机中安装ruby环境--转载
  5. 将请求挂载至WEB页面
  6. WPF解析TTF 字体
  7. 什么是USBMini接口
  8. HDU5317
  9. Cobar是提供关系型数据库(MySQL)分布式服务的中间件
  10. 2019-04-19 EasyWeb数据源问题
  11. java--反射机制总结
  12. UOJ#207. 共价大爷游长沙 LCT
  13. cerebro 配置
  14. zabbix3.4.7实现企业微信告警,亲测可用!
  15. Linux修改开机启动logo
  16. linux中强大的screen命令
  17. 20145234黄斐《网络对抗技术》实验五,MSF基础应用
  18. (算法)Hanoi Problem汉诺塔问题
  19. 51Nod 1521 一维战舰
  20. Vue组件进阶知识总结

热门文章

  1. 开启Ubuntu php错误提示 ZT
  2. iOS9的适配
  3. java作业2
  4. Unity3D ShaderLab 修改渲染队列进行深度排序
  5. window.opener调用父窗体方法的用法
  6. LeetCode Combinations (DFS)
  7. 五 Servlet 技术
  8. GFF format
  9. android的style控制Theme
  10. HashMap的笔记