准备工作:

CREATE TABLE [dbo].[Students](

[id] [int] IDENTITY(1,1) NOT NULL,

[names] [varchar](50) NULL,

[hobby] [varchar](50) NULL

)

insert into students values('张三','书法'),('张三','篮球'),('张三','台球'),('李四','书法'),('李四','唱歌'),('李四','足球'),('李四','乒乓球')

for xml path

把查询结果用xml表现出来。

1 正常的查询:

select * from Students

结果是:

id names hobby
----------- --------------------------------------------------
1 张三 书法
2 张三 篮球
3 张三 台球
4 李四 书法
5 李四 唱歌
6 李四 足球
7 李四 乒乓球

返回的是一个数据表格(多条)。

2 用xml表现

select * from Students for xml path

结果是:

XML_F52E2B61-18A1-11d1-B105-00805F49916B
------------------------------------------------------------------------------------
<row><id>1</id><names>张三</names><hobby>书法</hobby></row><row><id>2</id><names>张三</names><hobby>篮球</hobby></row

><row><id>3</id><names>张三</names><hobby>台球</hobby></row><row><id>4</id><names>李四</names><hobby>书法</hobby></row>

<row><id>5</id><names>李四</names><hob

也是一个数据表格(单条)

把查询结果做为xml数据格式返回了一行数据。

3 通过使用path()参数,可改变列节点:

select * from Students for xml path('')

结果:

XML_F52E2B61-18A1-11d1-B105-00805F49916B
-----------------------------------------------------------------------------------
<id>1</id><names>张三</names><hobby>书法</hobby><id>2</id><names>张三</names><hobby>篮球</hobby>

<id>3</id><names>张三</names><hobby>台球</hobby><id>4</id><names>李四</names><hobby>书法</hobby>

<id>5</id><names>李四</names><hobby>唱歌</hobby><id>6</id><names>李四</names><hobby>足球

使用path(‘’)空参数,去掉了row节点,直接显示的是两个属性字段。

4 自定义节点

select * from Students for xml path('selfNode')

结果如下:

XML_F52E2B61-18A1-11d1-B105-00805F49916B
--------------------------------------------------------------------------------------------
<selfNode><id>1</id><names>张三</names><hobby>书法</hobby></selfNode>

<selfNode><id>2</id><names>张三</names><hobby>篮球</hobby></selfNode>

<selfNode><id>3</id><names>张三</names><hobby>台球</hobby></selfNode>

<selfNode><id>4</id><names>李四</names><hobby>书法</hobby></selfNode>

总的来说,for xml path返回的是一条数据(一个xml字串)。所以,这个可以作为查询中的一列。如下:

select distinct aaa.names,hobby=(

SELECT hobby+',' FROM students

WHERE names=aaa.names

FOR XML PATH('')

)

from students aaa

结果如下:

names hobby
-------------------------------------------------- 
李四 书法,唱歌,足球,乒乓球,
张三 书法,篮球,台球,

从students表中查询names,且各自的hobby,hobby是多条记录,通过xml 整合到一条记录,并使用逗点分隔。

上面的语句中有一句:where names=aaa.names,因为for xml path返回的是一条数据字串,不能进行查询条件的关联,即不能做为数据表与其它表进行关联。

它只返回一行一列,且for xml path都整合到一字符串中而没有其它字段,所以不能与其它表进行联合查询。但可以在for xml之前进行联合查询,如下:

select distinct aaa.names,hobby=(

select hobby+',' FROM students

 where names=aaa.names

for xml path('')

)   from students aaa

for xml path部分的结果做为一个字段显示,而粗体部分表示把每个names中的hobby字段通过逗号连成一个字段,如下:

names hobby
--------------------------------------------------
李四 书法,唱歌,足球,乒乓球,
张三 书法,篮球,台球,

未使用distinct,结果如下:

names hobby
--------------------------------------------------
张三 书法,篮球,台球,
张三 书法,篮球,台球,
张三 书法,篮球,台球,
李四 书法,唱歌,足球,乒乓球,
李四 书法,唱歌,足球,乒乓球,
李四 书法,唱歌,足球,乒乓球,
李四 书法,唱歌,足球,乒乓球,

把重复的去掉,可通过group或distinct去掉

另外:对于可容忍的脏读而不死锁的with onlock在mssql中可在表后边使用with(nolock)脏读;今天查了一下,对于mysql来说,不需要使用with nolock,会自动使用nolock. 。这个我自己未做过测试,大概只是了解一下。

mssql for xml path使用的更多相关文章

  1. mssql的 for xml path 与 mysql中的group_concat类似MSSQL For xml Path

    /****** Script for SelectTopNRows command from SSMS ******/ SELECT D_ID,[D_Name] as Name FROM [LFBMP ...

  2. mssql sqlserver xml数据类型专题

    摘要: 下文将详细讲述sql server xml数据类型的相关知识,如下所示: 实验环境: sql server 2008 R2 xml数据类型简介: mssql sqlserver xml数据类型 ...

  3. Entity framewok 如何实现多条记录作为一条取出, for xml path如何实现

    http://www.myexception.cn/linq/1288046.html Entity framewok 怎么实现多条记录作为一条取出, for xml path怎么实现News表:ID ...

  4. for xml path 将单表中一个字段用逗号分隔

    我也是才知道这种用法的,刚好又用到写个简单的例子. select Name from tc_order_detail 如下表,现在要将做到将name每个以逗号连接 declare @df nvarch ...

  5. SQL Server 2008 R2——使用FOR XML PATH实现多条信息按指定格式在一行显示

    =================================版权声明================================= 版权声明:原创文章 谢绝转载  请通过右侧公告中的“联系邮 ...

  6. Sql Server FOR XML PATH

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

  7. Sql Server 之 for xml (path,raw,auto,root)

    1.for xml path('str') select ID,CreateTime  from dbo.ArticleInfo for xml Path('mytitle') 结果:(注意:如果是s ...

  8. 灵活运用 SQL SERVER FOR XML PATH

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

  9. 转王波洋,SQL语句中的 for XML Path('')

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

随机推荐

  1. 【枚举】珠心算测验[c++]

    题目描述 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术.珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及. 某学校的珠心算老师采用一种快速考察珠心算加 ...

  2. js-工具函数

    /** * 将文件大小转换成 ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],单位 * @param bytes * @returns */ ...

  3. typescript 与 js 开发 react 的区别

    一.从定义文件格式方面说1.传统的开发模式可以定义js文件或者jsx文件2.利用ts开发定义的文件格式tsx二.定义state的状态来说1.传统的方式直接在构造函数中使用 constructor(){ ...

  4. Java之NIO

    想要学习Java的Socket通信,首先要学习Java的IO和NIO基础,这方面可以阅读<Java NIO 系列教程>. 下面展示自己代码熟悉Java的NIO编程的笔记. 1.缓冲区(Bu ...

  5. 批量备份数据库脚本(PowerShell版)

    开始 昨天备份一个数据库拿来测试,发现备份后的文件非常大.后来去检查下使用的备份脚本,原来之前的备份脚本没有压缩功能. 现把之前的备份脚本修改下,支持压缩备份,和支持仅复制备份(CopyOnly). ...

  6. Deep Dive into Spark SQL’s Catalyst Optimizer(中英双语)

    文章标题 Deep Dive into Spark SQL’s Catalyst Optimizer 作者介绍 Michael Armbrust, Yin Huai, Cheng Liang, Rey ...

  7. Kafka 生产者和消费者入门代码基础

    这篇博文讲解Kafka 的生产者和消费者实例. 基础版本一 生产者 ProducerFastStart.java package com.xingyun.tutorial_1; import org. ...

  8. yaf项目将500错误打印到页面上

    一般在yaf项目调试的时候,如果代码有错误,页面只会响应500错误,但看不到哪里报了什么错误,通过开启yaf的一个配置可以将错误信息显示在页面上. 打开项目的index.php入口文件,在开头加入如下 ...

  9. 通过jQuery实时监听表格行数变化

    [本文出自天外归云的博客园] 使用bootstrap table组件,当使用过滤器的时候,页面的表格行数发生变化,此时需要统计表格行数.想要监听表格变化,如何做呢? 使用场景:有一个表格里放着许多测试 ...

  10. 数据类型表(DELPHI、C++)

    delphi整型数据表 Integer -2147483648..2147483647 signed 32-bit Cardinal 0..4294967295 unsigned 32-bit Sho ...