灵活运用 SQL SERVER FOR XML PATH

  FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。那么以一个实例为主.

        一.FOR XML PATH 简单介绍

             那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下:

       接下来我们来看应用FOR XML PATH的查询结果语句如下:

SELECT*FROM@hobbyFORXML PATH

       结果:

复制代码
<row>
  <hobbyID>1</hobbyID>
  <hName>爬山</hName>
</row>
<row>
  <hobbyID>2</hobbyID>
  <hName>游泳</hName>
</row>
<row>
  <hobbyID>3</hobbyID>
  <hName>美食</hName>
</row>
复制代码

      由此可见FOR XML PATH 可以将查询结果根据行输出成XML各式!

      那么,如何改变XML行节点的名称呢?代码如下:     

SELECT*FROM@hobbyFORXML PATH('MyHobby')

 

      结果一定也可想而知了吧?没错原来的行节点<row> 变成了我们在PATH后面括号()中,自定义的名称<MyHobby>,结果如下:

复制代码
<MyHobby>
  <hobbyID>1</hobbyID>
  <hName>爬山</hName>
</MyHobby>
<MyHobby>
  <hobbyID>2</hobbyID>
  <hName>游泳</hName>
</MyHobby>
<MyHobby>
  <hobbyID>3</hobbyID>
  <hName>美食</hName>
</MyHobby>
复制代码

      这个时候细心的朋友一定又会问那么列节点如何改变呢?还记的给列起别名的关键字AS吗?对了就是用它!代码如下:

SELECThobbyID as'MyCode',hName as'MyName'FROM@hobbyFORXML PATH('MyHobby')

 

      那么这个时候我们列的节点名称也会编程我们自定义的名称 <MyCode>与<MyName>结果如下:

复制代码
<MyHobby>
  <MyCode>1</MyCode>
  <MyName>爬山</MyName>
</MyHobby>
<MyHobby>
  <MyCode>2</MyCode>
  <MyName>游泳</MyName>
</MyHobby>
<MyHobby>
  <MyCode>3</MyCode>
  <MyName>美食</MyName>
</MyHobby>
复制代码

    噢! 既然行的节点与列的节点我们都可以自定义,我们是否可以构建我们喜欢的输出方式呢?还是看代码: 

SELECT'[ '+hName+']'FROM@hobbyFORXML PATH('')

    没错我们还可以通过符号+号,来对字符串类型字段的输出格式进行定义。结果如下:

[ 爬山 ][ 游泳 ][ 美食 ]

    那么其他类型的列怎么自定义? 没关系,我们将它们转换成字符串类型就行啦!例如:

SELECT'{'+STR(hobbyID)+'}','[ '+hName+']'FROM@hobbyFORXML PATH('')

    好的 FOR XML PATH就基本介绍到这里吧,更多关于FOR XML的知识请查阅帮助文档!

    接下来我们来看一个FOR XML PATH的应用场景吧!那么开始吧。。。。。。

        二.一个应用场景与FOR XML PATH应用

        首先呢!我们在增加一张学生表,列分别为(stuID,sName,hobby),stuID代表学生编号,sName代表学生姓名,hobby列存学生的爱好!那么现在表结构如下:

           

        这时,我们的要求是查询学生表,显示所有学生的爱好的结果集,代码如下:

复制代码
SELECTB.sName,LEFT(StuList,LEN(StuList)-1) ashobby FROM(
SELECTsName,
(SELECThobby+','FROMstudent 
  WHEREsName=A.sName 
  FORXML PATH('')) ASStuList
FROMstudent A 
GROUPBYsName
) B 
复制代码

         结果如下:

 分析: 好的,那么我们来分析一下,首先看这句:

SELECThobby+','FROMstudent 
  WHEREsName=A.sName 
  FORXML PATH('')

这句是通过FOR XML PATH 将某一姓名如张三的爱好,显示成格式为:“ 爱好1,爱好2,爱好3,”的格式!

那么接着看:

复制代码
SELECTB.sName,LEFT(StuList,LEN(StuList)-1) ashobby FROM(
SELECTsName,
(SELECThobby+','FROMstudent 
  WHEREsName=A.sName 
  FORXML PATH('')) ASStuList
FROMstudent A 
GROUPBYsName
) B  
复制代码

剩下的代码首先是将表分组,在执行FOR XML PATH 格式化,这时当还没有执行最外层的SELECT时查询出的结构为:

可以看到StuList列里面的数据都会多出一个逗号,这时随外层的语句:SELECT B.sName,LEFT(StuList,LEN(StuList)-1) as hobby  就是来去掉逗号,并赋予有意义的列明!

好啦,太晚啦就说到这里吧!

 

From:http://www.cnblogs.com/doubleliang/archive/2011/07/06/2098775.html

转载于:https://www.cnblogs.com/flysnow-z/p/3598085.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493402.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

近代数字信号处理实验-DFT分析信号的频谱

一、实验目的 &#xff08;1&#xff09;掌握利用DFT近似计算不同类型信号频谱的原理和方法。 &#xff08;2&#xff09;理解误差产生的原因及减小误差的方法。 &#xff08;3&#xff09;培养学生自主学习能力&#xff0c;以及发现问题、分析问题和解决问题的能力。 二、…

关于Sql语句的心得体会

在众多的找平要求中&#xff0c;无一不是要求熟悉sqlserver的&#xff0c;sqlserver无非要熟悉存储过程、触发器、指针、sql语句&#xff0c;最基本的就是sql语句&#xff0c;一下几点总结&#xff1a; 1、在sql语句中&#xff0c;查询用到函数的时候&#xff0c;很快就要联想到…

人工智能+能源:能源行业变革新趋势

来源&#xff1a;资本实验室随着环保压力的不断加大&#xff0c;以及可再生能源成本持续降低等因素&#xff0c;越来越多的国家都开始大力推动从传统化石能源转向可再生能源&#xff0c;全球很多大型企业也纷纷加入了全球可再生能源计划RE100&#xff0c;以实现可再生能源100%的…

利用numpy生成各种波

一&#xff0c;生成矩形波 矩形波的傅里叶级数 xnp.linspace(-np.pi,np.pi,201) knp.arange(1,99) k2*k-1 ynp.zeros_like(x) for i in range(len(x)):y[i](4/np.pi)*np.sum(np.sin(k*x[i])/k) # print(t) # print(f) plt.plot(x,y) plt.show() 二&#xff0c;生成锯齿波和三角…

解决TeamViewer访问超时限制的问题

一、卸载TeamViewer:找到安装路径&#xff0c;点击uninstall卸载 二、修改MAC地址 1、查看现有的mac地址&#xff1a;打开cmd界面&#xff0c;输入ipconfig/all 按回车&#xff0c;红框标记为无线局域网mac地址。 2、修改现有无线局域网mac地址 &#xff08;1&#xff09;按住…

Linux系统中的load average

1. load average 定义 linux系统中的Load对当前CPU工作量的度量。简单的说是进程队列的长度。 Load Average 就是一段时间 (1 分钟、5分钟、15分钟) 内平均 Load 。 通过系统命令"w"查看当前load average情况 上边0.31&#xff0c;0.30&#xff0c;0.31表示 第一位0.…

工业机器人原来可以这么酷,马斯克和中国美的都对它青睐有加

来源&#xff1a;机器人大讲堂摘要&#xff1a;工业机器人或许是大家认为最枯燥的机器人之一了吧&#xff1f;每次机器人展会上&#xff0c;工业机器人的展位总会备受冷落&#xff0c;硬邦邦的机械臂相比呆萌可爱的服务机器人总是少了那么几分吸引力。但是&#xff0c;我们也不…

关于EOF,转自新浪微博

本文转自http://blog.sina.com.cn/s/blog_7714171f0101798y.html EOF 是 End Of File 的缩写。 在C语言中&#xff0c;它是在标准库中定义的一个宏。 人们经常误认为 EOF 是从文件中读取的一个字符(牢记)。其实&#xff0c;EOF 不是一个字符&#xff0c;它被定义为是 int 类型的…

100年前没人信他,但他仅1项研究便远程摧毁万架飞机……

来源&#xff1a;世界科技创新论坛摘要&#xff1a;他是爱迪生最强大的对手&#xff0c;也是一个一生独立开发并取得专利700种&#xff0c;合作开发达1000种以上的科学狂人。科学界有一个普遍共识&#xff0c;人类历史上曾经存在过两个公认的旷世天才&#xff1a;达芬奇和尼古拉…

服务器安装opencv报错--libSM.so.6: cannot open shared ...+tensorflow 报错libcusolver.so.8.0: can not...

1.安装opencv出现以下错误&#xff1a; pip install opencv-contrib-python apt-get install -y python-qt4 apt-get install tk-dev python-tk 例如linux.zip.001, linux.zip.002, linux.zip.003... 首先 cat linux.zip* > linux.zip #合并为一个zip包 然后 unzip linu…

将JSON转成DataSet(DataTable)

方法1&#xff1a; /// <summary>/// 将JSON解析成DataSet只限标准的JSON数据/// 例如&#xff1a;Json&#xff1d;{t1:[{name:数据name,type:数据type}]} /// 或 Json&#xff1d;{t1:[{name:数据name,type:数据type}],t2:[{id:数据id,gx:数据gx,val:数据val}]}/// <…

AlphaGo之后,DeepMind重磅推出AlphaFold:基因序列预测蛋白质结构

来源&#xff1a;机器之心摘要&#xff1a;Alphabet&#xff08;谷歌&#xff09;旗下公司 DeepMind 的人工智能 AlphaGo 曾在国际象棋、围棋等项目中取得了超越人类的表现&#xff0c;其研究不仅震惊世界&#xff0c;也两次登上 Nature。如今&#xff0c;该公司已将人工智能技…

Web开发之容器

Web开发之容器 主题 Servlet容器、Web容器、应用服务器 参考资料 Servlet容器、Web容器、应用服务器 Servlet容器的主要任务是管理Servlet的生命周期&#xff1b;而Web容器更准确的说应该叫做Web服务器&#xff0c;它是用来管理和部署Web应用的&#xff1b;还有一种服务器叫做应…

李开复看2019投资趋势:最坏的时代将酝酿最伟大的公司

来源&#xff1a;网易智能摘要&#xff1a;12月3日下午&#xff0c;创新工场在北京举办了2019投资趋势分享会。创新工场创始人、董事长兼CEO李开复&#xff0c;创新工场联合创始人、管理合伙人汪华与创新工场合伙人张鹰对目前中国经济形势和投资趋势做了分析。01最坏的时代将酝…

高斯混合模型做聚类

概述 聚类算法大多数采用相似度来判断&#xff0c;而相似度又大多数采用欧式距离长短来衡量&#xff0c;而GMM采用了新的判断依据—–概率&#xff0c;即通过属于某一类的概率大小来判断最终的归属类别 。 GMM的基本思想就是&#xff1a;任意形状的概率分布都可以用多个高斯分…

C#使用HTML文件中的file文件上传,用C#代码接收上传文件

单独做图片上传很简单&#xff0c;如果要客户端要上传头像保存到服务器就要稍微麻烦一点点了。 不多说了&#xff0c;直接上源码&#xff1a; private void Upload() { string jsonInfo string.Empty; ///这句是关键&#xff0c;它是获取HTTP中文件流 的对象集合。 Ht…

基于深度学习的NLP 32页最新进展综述,190篇参考文献

来源&#xff1a;专知摘要&#xff1a;深度学习使用多层学习层次的数据表示,并在许多领域得到了最优的结果。最近,各种各样的模型设计和方法在自然语言处理(NLP)蓬勃发展。在本文中,我们回顾了被广泛应用于各种NLP任务的深度学习相关模型和算法以及它们的发展演变过程。我们还总…

.net framework摘抄与理解

1."源码"编译成"托管模块": 2.将"托管模块"合并成"托管程序集" 3.clr中的"JIT"执行"托管程序集" 第二次执行已被JIT编译成机器码的Console.WriteLine("") 转载于:https://www.cnblogs.com/doujiaomifan…

“新一代人工智能前沿与挑战”国际研讨会专家观点分享

来源&#xff1a;西电人工智能学院摘要&#xff1a;2018年11月25日-26日举办的“新一代人工智能前沿与挑战”中青年论坛暨第二十一届学术周在西安电子科技大学圆满落幕&#xff0c;研讨会上包括长江学者、IEEE Fellow、领域顶尖中青年学者、新锐企业领导者等在内的国内外权威专…

决策树算法及可视化

经典决策树算法包括ID3算法、C4.5算法以及GBDT的基分类器CART算法 ,ID3算法选择特征的依据是信息增益、C4.5是信息增益比&#xff0c;而CART则是Gini指数。 例子: 所谓信息增益就是数据在得到特征X的信息时使得类Y的信息不确定性减少的程度。假设数据集D的信息熵为H(D)&#x…