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

时间:2022-09-07 16:15:24

--使用 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基础学习&lt&semi;2&gt&semi;之--FOR XML AUTO&sol;RAW

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

  2. 转载---SQL Server XML基础学习&lt&semi;1&gt&semi;之--FOR XML PATH

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

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

  4. XML基础学习02&lt&semi;linq to xml&gt&semi;

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

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

    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. WPF 自定义Expander

    自定义Exander,收缩侧边栏 样式如下 <Grid> <Grid.Resources> <ControlTemplate x:Key="ExpanderCo ...

  2. 在c&num;中IO流读写操作

    1.使用FileStream读写文件 文件头: using System;using System.Collections.Generic;using System.Text;using System ...

  3. 【动态域名解析工具】tunnel,国内版的ngrok,花生壳可以睡觉了

    在笔者的系列微信开发教程中,有一个比较基础且重要的一节:微信开发的调试.在文章中我推荐了两种动态域名解析的工具用于将本地的开发环境部署成服务器,一种是花生壳,一种是ngrok,但毕竟我等屌丝用不起或者 ...

  4. Linq--扩展方法

    如果现在有一个这样的需求,求筛选出来的大于20MB的进程的和,常用的方法是写一个静态方法传进去一个ProcessData列表 比如: public static Int64 TotalMemory( ...

  5. 从蓝光到4K,腾讯视频高码率下载背后的技术

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 由 腾讯技术工程官方号 发布在云+社区 蓝光和4k视频正逐渐普及,4K视频峰值码率超10Mbit/s.架构平台部TVideo平台从资源,链路.缓 ...

  6. java开源安全框架-------Apache Shiro--第二天

    身份验证 即在应用中谁能证明他就是他本人.一般提供如他们的身份ID一些标志信息来表明他就是他本人,如提供身份证.用户名.密码来证明 在shiro中,用户需要提供principals(身份)和crede ...

  7. Java开发环境配置&lpar;2&rpar;--jdk配置和 多个JDK问题处理

    ==2018-8-15 16:41:06 更新 服务器 jdk1.6升级为1.8,没有卸载原来的1.6,直接安装1.8. 更改环境变量的 JAVA_HOME所指路径后, cmd 输入 java -ve ...

  8. day6 字符串

    重复输出字符串 # * 重复输出字符串 print("hello"*2) 字符串切片 # 字符串也拥有索引,和列表切片操作类似 print("helloworld&quo ...

  9. todomvc-app

    1.HTML <!doctype html> <html lang="en"> <head> <meta charset="ut ...

  10. &lbrack;转载&rsqb;linux内核中的HZ介绍

    时钟中断由系统定时硬件以周期性的间隔产生,这个间隔由内核根据 HZ 值来设定,HZ 是一个体系依赖的值,在 <Linux/param.h>中定义或该文件包含的某个子平台相关文件中.作为通用 ...