--使用 RAW 和 AUTO 模式不能很好地控制从查询结果生成的 XML 的形状。
--但是,对于要从查询结果生成 XML,EXPLICIT 模式会提供非常好的灵活性。

--必须以特定的方式编写 EXPLICIT 模式查询,以便将有关所需的 XML 的附加信息(如 XML 中的所需嵌套)显式指定为查询的一部分。
--根据所请求的 XML,编写 EXPLICIT 模式查询可能会很烦琐。您会发现使用 PATH 模式(具有嵌套)相对编写 EXPLICIT 模式查询而言更加简单。
--因为将所需的 XML 描述为 EXPLICIT 模式查询的一部分,所以必须确保生成的 XML 格式正确且有效。

--> 测试数据:#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 '野子' , '臭流氓'
--------------开始查询--------------------------
--EXPLICIT 模式会将由查询执行生成的行集转换为 XML 文档。
--为使 EXPLICIT 模式生成 XML 文档,行集必须具有特定的格式。
--这需要您编写 SELECT 查询以生成具有特定格式的行集(通用表),以便处理逻辑随后可以生成所需的 XML。

--首先,查询必须生成下列两个元数据列:
--第一列必须提供当前元素的标记号(整数类型),并且列名必须是 Tag。查询必须为从行集构造的每个元素提供唯一标记号。
--第二列必须提供父元素的标记号,并且此列的列名必须是 Parent。这样,Tag 和 Parent 列将提供层次结构信息。

SELECT
1 AS Tag,--Tag 是一个强制列,代表一个最高节点
NULL AS Parent,--Parent 同样是一个强之列,代码中NULL表示没有父节点,也就是该层次为顶层。
3 AS [node!1]
--"node!1" 此种形式代表的是根节点。
--"node" 元素名称
--"1" 代表的是指定层次结构的节点级别
FOR XML EXPLICIT

SELECT
1 AS Tag,
NULL AS Parent,
NULL AS [root!1],
NULL AS [node!2!id!ELEMENT]
UNION ALL
SELECT
2 AS Tag,--这里的tag 代表的是第二层的意思
1 AS Parent,--Parent的值代表了是Tag的父节点
NULL ,
id
FROM #tb WHERE id=1
FOR XML EXPLICIT
--------------结果--------------------------
/*
<root>
<node>
<id>1</id>
</node>
</root>
*/
--------------注释--------------------------
/*
[node!2!id!ELEMENT]
node 代表的是节点名称;
2代表的节点层次;
id 表示的是元素名称;.
ELEMENT 选项表示向 <node> 元素添加了 <id> 元素子级,而不是添加属性。
*/
--再添加一个节点
SELECT
1 AS Tag,
NULL AS Parent,
NULL AS [root!1],
NULL AS [node!2!id],
NULL AS [root2!3!value]
UNION ALL
SELECT
2 AS Tag,--这里的tag 代表的是第二层的意思
1 AS Parent,--Parent的值代表了是Tag的父节点
NULL,
id,NULL
FROM #tb WHERE id=1
UNION ALL
SELECT
3 AS Tag,
2 AS Parent,
NULL ,
0,
-1
FOR XML EXPLICIT
--------------结果--------------------------
/*
<root>
<node>
<id>1</id>
<root2>
<value>-1</value>
</root2>
</node>
</root>
*/

SELECT
1 AS Tag,
NULL AS Parent,
NULL AS [root!1],
NULL AS [node!2!id!ELEMENT],
NULL AS [root2!3!value!ELEMENT]
UNION ALL
SELECT
2 AS Tag,--这里的tag 代表的是第二层的意思
1 AS Parent,--Parent的值代表了是Tag的父节点
NULL,
id,NULL
FROM #tb WHERE id=1
UNION ALL
SELECT
3 AS Tag,
2 AS Parent,
NULL ,
0,
-1
FOR XML EXPLICIT

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

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

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

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

    --> 测试数据:#tbIF OBJECT_ID('TEMPDB.DBO.#tb') IS NOT NULL    DROP TABLE #tbGO CREATE TABLE #tb      ...

  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. 基于WebForm+EasyUI的业务管理系统形成之旅 -- 首页Portal界面拖拽(Ⅵ)

    上篇<基于WebForm+EasyUI的业务管理系统形成之旅 -- 构建Web界面>,主要介绍系统界面布局.导出数据等. 本篇将介绍首页Portal界面拖拽. 一.首页Portal界面拖拽 ...

  2. HDU 5648 DZY Loves Math 暴力打表

    题意:BC 76 div1 1003有中文题面 然后官方题解看不懂,我就不说了,然后看别人的题解 因为询问i,j最大都是15000,所以可以预处理,res[i][j]代表答案,然后显然这是开不下的,也 ...

  3. modsecurity配置指令学习

    事务(transactions) Console(控制台) 1 Introduction Modsecurity是保护网络应用安全的工作.不,从零开始.我常称modsecurity为WAF(网络应用防 ...

  4. jquery.cookie 使用文档,$.cookie() 文档教程, js 操作 cookie 教程文档。

    jquery.cookie 使用文档,$.cookie() 文档教程, js 操作 cookie 教程文档. jquery.cookie中的操作: jquery.cookie.js是一个基于jquer ...

  5. uvalive 7331 Hovering Hornet 半平面交+概率期望

    题意:一个骰子在一个人正方形内,蜜蜂在任意一个位置可以出现,问看到点数的期望. 思路:半平面交+概率期望 #include<cstdio> #include<cstring> ...

  6. JS实现的一个验证码,可以在前端验证后在提交action

    js实现的一个验证码功能,可以在前端判断验证码输入是否正确 输入的邮箱格式是否正确 验证成功后才提交action到后台 <!DOCTYPE html PUBLIC "-//W3C//D ...

  7. HDU-4115 Eliminate the Conflict 2sat

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4115 题意:Alice和Bob玩猜拳游戏,Alice知道Bob每次会出什么,为了游戏公平,Bob对Al ...

  8. 费用提前计算相关的DP(BZOJ2037,POJ3042,ZOJ3469)

    在刷ZeroClock大神的区间DP专辑,遇见了ZOJ3469,完全不无从下手,然后有人说是论问题,推荐看徐源盛<对一类动态规划问题的研究>这篇论文,果断得膜拜了下,感觉好神奇,可以把未来 ...

  9. yuv 图像里的stride和plane的解释

    stride可以翻译为:跨距 stride指在内存中每行像素所占的空间.如下图所示,为了实现内存对齐(或者其它的什么原因),每行像素在内存中所占的空间并不是图像的宽度. plane一般是以luma p ...

  10. 设置Windows的TCP/IP属性和内部网络号码

    这里,以Windows XP和Windows 7版本为例. 在安装了IPX/SPX协议或TCP/IP协议的Windows计算机上可以设置计算机的内部网络号码,主要可以防止进行局域网连接时出现冲突现象. ...