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

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

  1. declare @agent table
  2. (
  3. AgentID int,
  4. Fname varchar(5),
  5. SSN varchar(11)
  6. )
  7.  
  8. insert into @agent
  9. select 1, 'Vimal', '123-23-4521' union all
  10. select 2, 'Jacob', '321-52-4562' union all
  11. select 3, 'Tom', '252-52-4563'
  12.  
  13. declare @address table
  14. (
  15. AddressID int,
  16. AddressType varchar(12),
  17. Address1 varchar(20),
  18. Address2 varchar(20),
  19. City varchar(25),
  20. AgentID int
  21. )
  22.  
  23. insert into @address
  24. select 1, 'Home', 'abc', 'xyz road', 'RJ', 1 union all
  25. select 2, 'Office', 'temp', 'ppp road', 'RJ', 1 union all
  26. select 3, 'Home', 'xxx', 'aaa road', 'NY', 2 union all
  27. select 4, 'Office', 'ccc', 'oli Com', 'CL', 2 union all
  28. select 5, 'Temp', 'eee', 'olkiu road', 'CL', 2 union all
  29. select 6, 'Home', 'ttt', 'loik road', 'NY', 3
  30.  
  31. --SELECT
  32. -- 1 AS Tag,
  33. -- NULL AS Parent,
  34. -- 0 AS 'Agents!1!Sort!hide',
  35. -- NULL AS 'Agents!1!',
  36. -- NULL AS 'Agent!2!AgentID',
  37. -- NULL AS 'Agent!2!Fname!Element',
  38. -- NULL AS 'Agent!2!SSN!Element',
  39. -- NULL AS 'AddressCollection!3!Element',
  40. -- NULL AS 'Address!4!!xml',
  41. -- NULL AS 'Address!4!AddressType!Element',
  42. -- NULL AS 'Address!4!Address1!Element',
  43. -- NULL AS 'Address!4!Address2!Element',
  44. -- NULL AS 'Address!4!City!Element'
  45. --UNION ALL
  46. -- SELECT
  47. -- 2 AS Tag,
  48. -- 1 AS Parent,
  49. -- AgentID * 100,
  50. -- NULL, AgentID, Fname, SSN,
  51. -- NULL, NULL, NULL, NULL, NULL, NULL
  52. --FROM @Agent
  53. --UNION ALL
  54. -- SELECT
  55. -- 3 AS Tag,
  56. -- 2 AS Parent,
  57. -- AgentID * 100 + 1,
  58. -- NULL,NULL,NULL,
  59. -- NULL,
  60. -- NULL,
  61. -- NULL, NULL, NULL, NULL, NULL
  62. --FROM @Agent
  63. --UNION ALL
  64. --SELECT
  65. -- 4 AS Tag,
  66. -- 3 AS Parent,
  67. -- AgentID * 100 + 2,
  68. -- NULL, NULL, NULL, NULL, NULL,
  69. -- '<!-- ' + AddressType + ' Address -->', AddressType,
  70. -- Address1, Address2, City
  71. --FROM @Address
  72. --ORDER BY [Agents!1!Sort!hide]
  73. --FOR XML EXPLICIT
  74.  
  75. SELECT
  76. 1 AS Tag,
  77. NULL AS Parent,
  78. NULL AS [Agents!1!],
  79. NULL AS [Agent!2!AgentID],
  80. NULL AS [Agent!2!Fname!Element],
  81. NULL AS [Agent!2!SSN!Element],
  82. NULL AS [AddressCollection!3!Element],
  83. NULL AS [Address!4!AddressType!Element],
  84. NULL AS [Address!4!Address1!Element],
  85. NULL AS [Address!4!Address2!Element],
  86. NULL AS [Address!4!City!Element]
  87.  
  88. UNION ALL
  89.  
  90. SELECT
  91. 2 AS Tag,
  92. 1 AS Parent,
  93. NULL, AgentID, Fname, SSN,
  94. NULL,NULL, NULL, NULL, NULL
  95. FROM @Agent
  96.  
  97. UNION ALL
  98.  
  99. SELECT
  100. 3 AS Tag,
  101. 2 AS Parent,
  102. NULL,AgentID,NULL, NULL,
  103. NULL, NULL, NULL, NULL, NULL
  104.  
  105. FROM @Agent
  106.  
  107. UNION ALL
  108.  
  109. SELECT
  110. 4 AS Tag,
  111. 3 AS Parent,
  112. NULL,AgentID,NULL,NULL,NULL,
  113. AddressType, Address1, Address2, City
  114.  
  115. FROM @Address
  116.  
  117. ORDER BY
  118. -- all properties of every agent
  119. -- (from tag 2 and 4: SSN, fname and adresses)
  120. -- will be sorted by agentID and combined into
  121. -- separate groups. It is necessary in same cases.
  122. [Agent!2!AgentID],
  123. [AddressCollection!3!Element], -- optional because NULL everywhere
  124. [Address!4!AddressType!Element]-- any ordering by elements of tag 4
  125.  
  126. 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. javascript 幻灯片代码(含自动播放)

    HTML <div class="slideshow-container"> <div class="mySlides fade"> & ...

  2. Android中Alarm的机制

    本次给大家分析的是Android中Alarm的机制所用源码为最新的Android4.4.4.首先简单介绍如何使用Alarm并给出其工作原理,接着分析Alarm和Timer以及Handler在完成定时任 ...

  3. 手撕面试题ThreadLocal!!!

    说明 面试官:讲讲你对ThreadLocal的一些理解. 那么我们该怎么回答呢????你也可以思考下,下面看看零度的思考: ThreadLocal用在什么地方? ThreadLocal一些细节! Th ...

  4. 最小二乘法,python3实现

    https://www.cnblogs.com/BlogOfMr-Leo/p/8627311.html                      [用的是库函数] https://blog.csdn. ...

  5. python2与python3的不同

    1.源码: python2的源码混乱.冗余.重复,非常不规范 python3的源码经过整合,优美.清晰.简单 2.编码: python2的默认编码是ASCII码,不能识别中文,需要在行首添加# -*- ...

  6. Lucy_Hedgehog techniques

    在project euler 的第\(10\)题的 \(forum\) 中 Lucy Hedgehog 提到的这种方法. 求 \(n\) 以内素数个数以及求 \(n\) 以内素数和的算法. 定义\(S ...

  7. Day2:PYC

    一.pyc里装的是预编译后的字节码文件 二.一般存放在”__pycache__“目录 三.当python程序运行时,编译的结果是保存在位于内存中的PyCodeObject中,当Python程序运行结 ...

  8. Hypervisor scheduler

    Techniques for configuring a hypervisor scheduler to make use of cache topology of processors and ph ...

  9. java——数组

    数组是多个同样数据类型数组组合,当中数据类型是不论什么数据类型. 数组变量是引用类型变量,数组能够作为对象,数组中的每个元素相当于对象的成员变量,所以数组元素能够默认初始化.(博客java--变量分类 ...

  10. POJ 3278 Catch That Cow(BFS 剪枝)

    题目链接:http://poj.org/problem?id=3278 这几次都是每天的第一道题都挺顺利,然后第二道题一卡一天. = =,今天的这道题7点40就出来了,不知道第二道题在下午7点能不能出 ...