--> 测试数据:#tb
IF OBJECT_ID('TEMPDB.DBO.#tb') IS NOT NULL 
   DROP TABLE #tb
GO 
CREATE TABLE #tb
       (
        [id] INT IDENTITY PRIMARY KEY ,
        [name] VARCHAR(4),
        [type] VARCHAR(10)
       )
INSERT  #tb
        SELECT  '彪' , '流氓'
        UNION ALL
        SELECT  '阿紫' , '流氓'
        UNION ALL
        SELECT  '小强' , '流氓'
        UNION ALL
        SELECT  '光辉' , '臭流氓'
        UNION ALL
        SELECT  '小D' , '臭流氓'
        UNION ALL
        SELECT  '野子' , '臭流氓'
--------------开始查询--------------------------
--没有名称的列
--生成此 XML。 默认情况下,针对行集中的每一行,生成的 XML 中将生成一个相应的 <row> 元素。 这与 RAW 模式相同。
SELECT 1 FOR XML PATH
--延伸
SELECT [name]+'' FROM #tb FOR XML PATH
--去掉<row> 元素
SELECT [name]+'' FROM #tb FOR XML PATH('')
--具有名称的列
SELECT [name] FROM #tb FOR XML PATH
SELECT * FROM #tb FOR XML PATH
--列名以 @ 符号开头。
SELECT id  AS '@id',[name] FROM #tb FOR XML PATH
--列名不以 @ 符号开头
SELECT [name] AS 臭流氓 FROM #tb FOR XML PATH('一群流氓')
--列名以 @ 符号开头并包含斜杠标记 (/)
SELECT id  AS '@id',
[name] AS '一群流氓/臭流氓' 
FROM #tb FOR XML PATH
--名称指定为通配符的列
--如果指定的列名是一个通配符 (*),则插入此列的内容时就像没有指定列名那样插入。 
--如果此列不是 xml 类型的列,则此列的内容将作为文本节点插入
SELECT id  AS '@id',
[name] AS '*' 
FROM #tb FOR XML PATH
--列名为 XPath 节点测试的列
--text()
--对于名为 text() 的列,该列中的字符串值将被添加为文本节点。
--comment()
--对于名为 comment() 的列,该列中的字符串值将被添加为 XML 注释。
--node()
--对于名为 node() 的列,结果与列名为通配符 (*) 时相同。
--处理指令(名称)
--如果列名为处理指令,该列中的字符串值将被添加为此处理指令目标名称的 PI 值。

SELECT id  AS '@id',
'臭流氓' AS 'text()',
'一个臭流氓'                   as "processing-instruction(PI)",
'chouliumang' AS 'comment()',
[name] AS 'EmpName/text()', 
[name] AS '臭流氓/node()'
FROM #tb
WHERE id=1
FOR XML PATH
/*
----------------结果----------------------------

<row id="1">臭流氓<?PI 一个臭流氓?><!--chouliumang--><EmpName>彪</EmpName><臭流氓>彪</臭流氓></row>
*/

--带有指定为 data() 的路径的列名
--如果被指定为列名的路径为 data(),则在生成的 XML 中,该值将被作为一个原子值来处理。 
--如果序列化中的下一项也是一个原子值,则将向 XML 中添加一个空格字符。 
--这在创建列表类型化元素值和属性值时很有用。 以下查询将检索产品型号 ID、名称和该产品型号中的产品列表。
SELECT id  AS '@id',
[name] AS '@name',
[name],
[type] AS 'data()'
FROM #tb
WHERE id=1
FOR XML PATH
/* 
*/
--默认情况下,列中的 Null 值映射为“缺少相应的属性、节点或元素”。 
--通过使用 ELEMENTS 指令请求以元素为中心的 XML 并指定 XSINIL 来请求为 NULL 值添加元素,
--可以覆盖此默认行为,如以下查询所示:
--未指定 XSINIL,将缺少 <null> 元素。
SELECT id  AS '@id',
NULL AS 'xx/null',
[name] AS 'xx/name',
[type] AS 'xx/type'
FROM #tb
FOR XML PATH
--2
SELECT id  AS '@id',
NULL AS 'xx/null',
[name] AS 'xx/name',
[type] AS 'xx/type'
FROM #tb
FOR XML PATH, ELEMENTS XSINIL

--ROOT/TYPE/BINARY选项
SELECT id  AS '@id',
[name] ,
[type],
0x78786F6F AS 'VARBINARY'
FROM #tb
FOR XML PATH,
ROOT('oo'),--指定向产生的 XML 中添加单个顶级元素。 可以选择指定要生成的根元素名称。 默认值为“root”。
TYPE,--指定查询以 xml 类型返回结果。
BINARY BASE64--如果指定 BINARY Base64 选项,则查询所返回的任何二进制数据都用 base64 编码格式表示。
--若要使用 RAW 和 EXPLICIT 模式检索二进制数据,必须指定此选项。 
--在 AUTO 模式中,默认情况下将二进制数据作为引用返回。 有关使用示例,请参阅将 RAW 模式与 FOR XML 一起使用。

转载---SQL Server XML基础学习<1>之--FOR XML PATH的更多相关文章

  1. 转载---SQL Server XML基础学习<3>之--FOR XML EXPLICIT

    --使用 RAW 和 AUTO 模式不能很好地控制从查询结果生成的 XML 的形状.--但是,对于要从查询结果生成 XML,EXPLICIT 模式会提供非常好的灵活性. --必须以特定的方式编写 EX ...

  2. 转载---SQL Server XML基础学习<2>之--FOR XML AUTO/RAW

    本文主要介绍FOR XML 的 AUTO 模式和 RAW 模式 --AUTO 模式将查询结果以嵌套 XML 元素的方式返回.这不能较好地控制从查询结果生成的 XML 的形式. --如果要生成简单的层次 ...

  3. sql server 数据库基础学习心得 思维导图

  4. XML基础学习02<linq to xml>

    Linq to XML的理解 1:这是一种比较好的操作Xml的工具. àXDocument 文档 àXElement 元素 àXAttribute 属性 àXText 文本 2:这里还是和我们之前创建 ...

  5. C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用

    C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备)  https://blog.csdn.net/u013519551/article/details/51220841 1. . ...

  6. mysql与sql server参照对比学习mysql

    mysql与sql server参照对比学习mysql 关键词:mysql语法.mysql基础 转自桦仔系列:http://www.cnblogs.com/lyhabc/p/3691555.html ...

  7. cmd常用命令 和 sql server相关基础

    在Java开发中 ms sql server 接触算是比较少的,本文记录一些ms sql server的基础知识. 1. 为表字段增加索引:create index user_openid on us ...

  8. Sql Server数据库基础

    --------------------------------------第一章  Sql Server数据库基础------------------------------------------ ...

  9. 第一篇——第一文 SQL Server 备份基础

    原文:第一篇--第一文 SQL Server 备份基础 当看这篇文章之前,请先给你的所有重要的库做一次完整数据库备份.下面正式开始备份还原的旅程. 原文出处: http://blog.csdn.net ...

随机推荐

  1. lru cache java

    http://www.acmerblog.com/leetcode-lru-cache-lru-5745.html acm之家的讲解是在是好,丰富 import java.util.LinkedHas ...

  2. Scala学习笔记(二)表达式和函数

    笔记的整理主要针对Scala对比Java的新特性:   1.if表达式 if表达式是有结果返回的. val a= if (5>2) "你好" else 1 a的值为if表达式 ...

  3. HW4.5

    public class Solution { public static void main(String[] args) { final double POUNDS_PER_KILOGRAM = ...

  4. repeater中后台动态为控件添加属性

    在此贴出repeater中的ItemDataBound事件中的代码: private void ItemDataBound(object sender, RepeaterItemEventArgs e ...

  5. Native code - how to get function call stack (backtrace) programatically 附带源代码

    自己根据 https://github.com/zhuowei/libcorkscrew-ndk 上的库做了一个包装库并附带使用的例子(executable 分支),具体代码在自己的代码仓库里,名字叫 ...

  6. ZOJ3471--Most Powerful(状压DP)

    有n(n<10)个小球,每两个碰撞有其中一个会消失,并产生一定能量.求产生最大能量. 有了正确思路题目比较简单,我的思路果然是歪的... 我的思路是dp[i][j]表示i这个状态剩下第j个小球, ...

  7. __attribute__ ((__section__ (".init.text")))

    在kernel中有很多__init,这个东东到底是何方神圣捏?且听小生我一一道来.下面是其定义:file:/include/linux/init.h 43 #define __init      __ ...

  8. Oracle ABP(Autotask Background Process)

    ABP相当于自动任务与调度程序之间的中介,其主要作用是将自动任务转换成Autotask作业,供调度程序执行.同样重要的是,ABP还维护所有任务执行的历史记录.ABP将其专用资料档案库存储在sysaux ...

  9. 在 windows 上面安装 tensorflow

    这个是 tensorflow 官网地址, https://www.tensorflow.org/get_started/os_setup#pip_installation_on_windows 上面有 ...

  10. 微信开发第8章 通过accesstoken将长连接转换为短链接

    业务场景:开发的过程中经常会有一些很长的链接,这个时候如果生成二维码,会导致扫码的过程中识别比较慢,如果存入数据库,会导致数据库的字段长度要设定的很长才行,所以把长连接转换为短链接就越来越重要了. 接 ...