sql for xml 还有一种写法(採用 tag 与 union all,简洁易懂)

測试环境:sql 08, 08 R2, 2010,  2012, 2014 等

declare @agent table
(
AgentID int,
Fname varchar(5),
SSN varchar(11)
) insert into @agent
select 1, 'Vimal', '123-23-4521' union all
select 2, 'Jacob', '321-52-4562' union all
select 3, 'Tom', '252-52-4563' declare @address table
(
AddressID int,
AddressType varchar(12),
Address1 varchar(20),
Address2 varchar(20),
City varchar(25),
AgentID int
) insert into @address
select 1, 'Home', 'abc', 'xyz road', 'RJ', 1 union all
select 2, 'Office', 'temp', 'ppp road', 'RJ', 1 union all
select 3, 'Home', 'xxx', 'aaa road', 'NY', 2 union all
select 4, 'Office', 'ccc', 'oli Com', 'CL', 2 union all
select 5, 'Temp', 'eee', 'olkiu road', 'CL', 2 union all
select 6, 'Home', 'ttt', 'loik road', 'NY', 3 --SELECT
-- 1 AS Tag,
-- NULL AS Parent,
-- 0 AS 'Agents!1!Sort!hide',
-- NULL AS 'Agents!1!',
-- NULL AS 'Agent!2!AgentID',
-- NULL AS 'Agent!2!Fname!Element',
-- NULL AS 'Agent!2!SSN!Element',
-- NULL AS 'AddressCollection!3!Element',
-- NULL AS 'Address!4!!xml',
-- NULL AS 'Address!4!AddressType!Element',
-- NULL AS 'Address!4!Address1!Element',
-- NULL AS 'Address!4!Address2!Element',
-- NULL AS 'Address!4!City!Element'
--UNION ALL
-- SELECT
-- 2 AS Tag,
-- 1 AS Parent,
-- AgentID * 100,
-- NULL, AgentID, Fname, SSN,
-- NULL, NULL, NULL, NULL, NULL, NULL
--FROM @Agent
--UNION ALL
-- SELECT
-- 3 AS Tag,
-- 2 AS Parent,
-- AgentID * 100 + 1,
-- NULL,NULL,NULL,
-- NULL,
-- NULL,
-- NULL, NULL, NULL, NULL, NULL
--FROM @Agent
--UNION ALL
--SELECT
-- 4 AS Tag,
-- 3 AS Parent,
-- AgentID * 100 + 2,
-- NULL, NULL, NULL, NULL, NULL,
-- '<!-- ' + AddressType + ' Address -->', AddressType,
-- Address1, Address2, City
--FROM @Address
--ORDER BY [Agents!1!Sort!hide]
--FOR XML EXPLICIT SELECT
1 AS Tag,
NULL AS Parent,
NULL AS [Agents!1!],
NULL AS [Agent!2!AgentID],
NULL AS [Agent!2!Fname!Element],
NULL AS [Agent!2!SSN!Element],
NULL AS [AddressCollection!3!Element],
NULL AS [Address!4!AddressType!Element],
NULL AS [Address!4!Address1!Element],
NULL AS [Address!4!Address2!Element],
NULL AS [Address!4!City!Element] UNION ALL SELECT
2 AS Tag,
1 AS Parent,
NULL, AgentID, Fname, SSN,
NULL,NULL, NULL, NULL, NULL
FROM @Agent UNION ALL SELECT
3 AS Tag,
2 AS Parent,
NULL,AgentID,NULL, NULL,
NULL, NULL, NULL, NULL, NULL FROM @Agent UNION ALL SELECT
4 AS Tag,
3 AS Parent,
NULL,AgentID,NULL,NULL,NULL,
AddressType, Address1, Address2, City FROM @Address ORDER BY
-- all properties of every agent
-- (from tag 2 and 4: SSN, fname and adresses)
-- will be sorted by agentID and combined into
-- separate groups. It is necessary in same cases.
[Agent!2!AgentID],
[AddressCollection!3!Element], -- optional because NULL everywhere
[Address!4!AddressType!Element]-- any ordering by elements of tag 4 FOR XML EXPLICIT

执行结果:

文章来源:http://social.msdn.microsoft.com/Forums/sqlserver/zh-CN/97f79941-324e-479e-ba5b-851cc534ebe5/problem-in-for-xml-explicit-query?

forum=sqlxml

sql for xml 还有一种写法(採用 tag 与 union all,简洁易懂)的更多相关文章

  1. sql 存储过程 in 的两种写法

    最近又忘记存储过程 除了exec 动态写法的另外一种,这里记录一下,方便查找 写法1,动态语句 CREATE PROCEDURE sp_CountShiftWish @strids varchar ( ...

  2. mybatis-plus 自定义SQL,XML形式,传参的几种方式

    mybatis-plus 自定义SQL,XML形式,传参的几种方式 前提说明 所涉及文件 传参类型说明 1.Java代码中使用QueryWrapper动态拼装SQL 2.简单类型参数(如String, ...

  3. sql语句有几种写法

    sql语句有几种写法 1:SELECT * FROM tablename ORDER BY RAND() LIMIT 想要获取的数据条数: 2:SELECT *FROM `table` WHERE i ...

  4. SQL Server 存储过程的几种常见写法分析,我们该用那种写法

    本文出处: http://www.cnblogs.com/wy123/p/5958047.html 最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫,不知道各种 ...

  5. Sql语句模糊查询字符串的两种写法

    Sql语句模糊查询有两种写法,一种是在jdbcTemplate的查询方法参数里拼接字符串%,一种是在Sql语句里拼接%字符串. public class IsNameDaoImpl implement ...

  6. Android开发系列之button事件的4种写法

    经过前两篇blog的铺垫,我们今天热身一下,做个简单的样例. 文件夹结构还是引用上篇blog的截图. 详细实现代码: public class MainActivity extends Activit ...

  7. 关于MyBatis的两种写法

    刚接触MyBatis是在Jike的视频中学习的,但是之后又发现和项目中的MyBatis的用法不太一致.上网找了好多资料,发现网上的教程分为两种写法: 第一种,是jike视频中的写法,写好map.xml ...

  8. Android笔记---点击事件的四种写法

    Android 点击事件的四种写法: 1. 以内部类的形式实现 OnClickListener 接口.定义点击事件 class MainActivity extents Activity{ // .. ...

  9. java解析xml的三种方法

    java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...

随机推荐

  1. position记录

    1.  relative(相对定位):生成相对定位的元素,通过top,bottom,left,right的设置相对于其正常(原先本身)位置进行定位.可通过z-index进行层次分级.均是以父级的左上角 ...

  2. C#调用C++生成的动态链接库DLL

    一.背景 由于要使用C#写app,所以要把C++生成的DLL在C#中调用,所以就涉及怎样去调用外部的dll问题. 二.C#调用外部DLL 首先先看下C#调用外部DLL的代码 using System. ...

  3. JavaScript学习总结(6)——js弹出框、对话框、提示框、弹窗总结

    一.JS的三种最常见的对话框 [javascript] view plaincopy //====================== JS最常用三种弹出对话框 =================== ...

  4. ecshop微信接口基础认识

    ecshop微信接口基础认识,当你要学习ecshop和微信整合的时候,你就必须研究ecshop的数据结构对接以及微信数据接口的基本知识.我们知道微信其实就是通过有效的消息推送,用JSON格式的数据或者 ...

  5. 洛谷—— P1080 国王游戏

    https://www.luogu.org/problem/show?pid=1080 题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整 ...

  6. ubuntu-系统密匙

    1.安装虚拟机xp,需要密匙,网上搜了一个,验证能用 MRX3F-47B9T-2487J-KWKMF-RPWBY 2.安装vm也需要密匙,如下可用 HC6JC-FPJ4M-RZM61-48852-2A ...

  7. actionbar-displayOptions 属性分析

    displayOptions 这个属性主要是控制这actionbar 上返回按钮.标题等的显示.它作为 actionBarStyle 的一个item,如下 <style name="A ...

  8. 3. ZAB与Paxos算法的联系与区别。

    转自:https://blog.csdn.net/en_joker/article/details/78665809 ZAB协议并不是Paxos算法的一个典型实现,在讲解ZAB和Paxos之间的区别之 ...

  9. Flask项目之手机端租房网站的实战开发(十二)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/8 ...

  10. JS预解释的总结

    预解释阶段发生在创建了堆内存,让代码执行之前,对当前作用域中带var和function的进行预解释 在浏览器解析执行代码的时候,会提前把带var和function的代码声明或定义,提前放在作用域的最前 ...