转载---SQL Server XML基础学习<3>之--FOR XML EXPLICIT
--使用 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的更多相关文章
- 转载---SQL Server XML基础学习<2>之--FOR XML AUTO/RAW
本文主要介绍FOR XML 的 AUTO 模式和 RAW 模式 --AUTO 模式将查询结果以嵌套 XML 元素的方式返回.这不能较好地控制从查询结果生成的 XML 的形式. --如果要生成简单的层次 ...
- 转载---SQL Server XML基础学习<1>之--FOR XML PATH
--> 测试数据:#tbIF OBJECT_ID('TEMPDB.DBO.#tb') IS NOT NULL DROP TABLE #tbGO CREATE TABLE #tb ...
- sql server 数据库基础学习心得 思维导图
- XML基础学习02<linq to xml>
Linq to XML的理解 1:这是一种比较好的操作Xml的工具. àXDocument 文档 àXElement 元素 àXAttribute 属性 àXText 文本 2:这里还是和我们之前创建 ...
- C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用
C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备) https://blog.csdn.net/u013519551/article/details/51220841 1. . ...
- mysql与sql server参照对比学习mysql
mysql与sql server参照对比学习mysql 关键词:mysql语法.mysql基础 转自桦仔系列:http://www.cnblogs.com/lyhabc/p/3691555.html ...
- cmd常用命令 和 sql server相关基础
在Java开发中 ms sql server 接触算是比较少的,本文记录一些ms sql server的基础知识. 1. 为表字段增加索引:create index user_openid on us ...
- Sql Server数据库基础
--------------------------------------第一章 Sql Server数据库基础------------------------------------------ ...
- 第一篇——第一文 SQL Server 备份基础
原文:第一篇--第一文 SQL Server 备份基础 当看这篇文章之前,请先给你的所有重要的库做一次完整数据库备份.下面正式开始备份还原的旅程. 原文出处: http://blog.csdn.net ...
随机推荐
- diamond专题(三)—— diamond架构
大家好,这次为大家带来的是diamond的架构,架构如下图所示: 对该图进行一些说明: 1.作为一个配置中心,diamond的功能分为发布和订阅两部分.因为diamond存放的是持久数据,这些数据的变 ...
- selenium1.0和selenium2.0页面等待处理详解
一.selenium1.0页面等待 1.……AndWait 经常会看到, selenium action命令中很多有这种……AndWait后缀, 例如click和clickAndWait命令: cli ...
- 如何在GeoServer上发布一张地图
在GeoServer上发布一张地图步骤大致如下: 先准备一张地图,格式可以是:jpg.png.tif等. Jpg文件对应的坐标信息文件为jgw格式文件,投影文件为prj文件;Tif文件对应的坐标信息文 ...
- Bzoj 1565: [NOI2009]植物大战僵尸 最大权闭合图,拓扑排序
题目: http://cojs.tk/cogs/problem/problem.php?pid=410 410. [NOI2009] 植物大战僵尸 ★★★ 输入文件:pvz.in 输出文件:p ...
- Linux内核结构分析与移植
Linux内核主要的5个部分是:进程调度,内存管理,虚拟文件系统,网络接口,进程通信. 这5个部分之间的关系如下: (1)进程调度部分负责控制进程对CPU的访问. (2)内存管理允许多个进程安全地共享 ...
- 12款有助于简化CSS3开发的工具
网站开发者能通过CSS3为网站设计增添很多时尚元素,CSS3 对CSS规范做了很大的改进.现在,本文将介绍12款有助于简化CSS3开发的工具. 1.CSS3 Pie: 允许在IE上使用CSS3绝大部 ...
- MYSQL存储过程中的IN、OUT和INOUT
MYSQL存储过程中的IN.OUT和INOUT,不能简单理解为一个方法的参数和返回值,而是面向整个过程上下文变量的. 一.MySQL 存储过程参数(in) 基本可以理解为传入function的参数,而 ...
- 【原创】一个复制本地文件到Hadoop文件系统的实例
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net ...
- 《Introduction to Algorithm》-chaper30-多项式与快速傅里叶变换
两个n次多项式的相加最直接的方法所需要的时间是O(n),而实现两个n次多项式的乘法的直接方法则需要O(n^2),本章讨论的快速傅里叶变换(FFT),将会将这一过程的时间复杂度降至O(nlogn).同时 ...
- 简述configure、pkg-config、pkg_config_path三者的关系
简述configure.pkg-config.pkg_config_path三者的关系 一.什么是configure 源码安装过程中大多会用到configure这个程序,一般的configure都是一 ...