[MSSQL]FOR XML AUTO I

本篇仅介绍最简单的XML操作,FOR XML AUTO

F1帮助中是这么描述滴:

FOR XML 模式可以是 RAW、AUTO、EXPLICIT 或 PATH。它确定产生的 XML 的形状。

并且还有这么段重要提示:

不推荐使用 FOR XML 选项的 XMLDATA 指令。如果是 RAW 和 AUTO 模式,请使用 XSD 生成。在 EXPLICIT 模式下,没有 XMLDATA 指令的替代项。后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

以上内容了解下即可,以下内容了解下即可,Let’s Go

先看测试用数据

   1: SELECT * FROM T
   2:  
   3: 输出
   4: GRP_A                GRP_B                GRP_C                VAL
   5: -------------------- -------------------- -------------------- -----------
   6: a1                   b1                   c1                   10
   7: a1                   b1                   c2                   10
   8: a1                   b2                   c2                   40
   9: a1                   b2                   c3                   40
  10: a1                   b2                   c3                   50
  11: a2                   b3                   c3                   NULL
  12: a2                   b3                   c3                   NULL
  13: a2                   b3                   c3                   NULL
  14:  
  15: (8 行受影响)

最简单嘛,加上三个关键字再看输出结果:

   1: USE DORBEN
   2: GO
   3:  
   4: SELECT * FROM T
   5: FOR XML AUTO


输出介个:

image


结果集是个连接,点开瞧瞧:

   1: <T GRP_A="a1" GRP_B="b1" GRP_C="c1" VAL="10" />
   2: <T GRP_A="a1" GRP_B="b1" GRP_C="c2" VAL="10" />
   3: <T GRP_A="a1" GRP_B="b2" GRP_C="c2" VAL="40" />
   4: <T GRP_A="a1" GRP_B="b2" GRP_C="c3" VAL="40" />
   5: <T GRP_A="a1" GRP_B="b2" GRP_C="c3" VAL="50" />
   6: <T GRP_A="a2" GRP_B="b3" GRP_C="c3" />
   7: <T GRP_A="a2" GRP_B="b3" GRP_C="c3" />
   8: <T GRP_A="a2" GRP_B="b3" GRP_C="c3" />


新增了FOR XML AUTO关键字后,查询结果集变成了XML,且,原表每行数据现在变成了一行XML节点
其中列数据变成了XML中的属性,如果原列值为NULL,则XML中不予体现,如XML结果集中的第6,7,8行


接下来这个例子依然很简单,仅仅是指定一些别名,列别名和表别名,看代码吧

   1: SELECT
   2:     GRP_A AS GA,
   3:     GRP_B AS GB,
   4:     GRP_C AS GC,
   5:     VAL AS VALUE
   6: FROM T AS Record
   7: FOR XML AUTO

输出结果

   1: <Record GA="a1" GB="b1" GC="c1" VALUE="10" />
   2: <Record GA="a1" GB="b1" GC="c2" VALUE="10" />
   3: <Record GA="a1" GB="b2" GC="c2" VALUE="40" />
   4: <Record GA="a1" GB="b2" GC="c3" VALUE="40" />
   5: <Record GA="a1" GB="b2" GC="c3" VALUE="50" />
   6: <Record GA="a2" GB="b3" GC="c3" />
   7: <Record GA="a2" GB="b3" GC="c3" />
   8: <Record GA="a2" GB="b3" GC="c3" />

可以看到,影响的是行名和属性名


现在来添加ELEMENTS选项,看看结果会怎样,SQL及结果如下

   1: SELECT
   2:     GRP_A AS GA,
   3:     GRP_B AS GB,
   4:     GRP_C AS GC,
   5:     VAL AS VALUE
   6: FROM T AS Record
   7: FOR XML AUTO,ELEMENTS

输出结果

   1: <Record>
   2:   <GA>a1</GA>
   3:   <GB>b1</GB>
   4:   <GC>c1</GC>
   5:   <VALUE>10</VALUE>
   6: </Record>
   7: <Record>
   8:   <GA>a1</GA>
   9:   <GB>b1</GB>
  10:   <GC>c2</GC>
  11:   <VALUE>10</VALUE>
  12: </Record>
  13: <Record>
  14:   <GA>a1</GA>
  15:   <GB>b2</GB>
  16:   <GC>c2</GC>
  17:   <VALUE>40</VALUE>
  18: </Record>
  19: <Record>
  20:   <GA>a1</GA>
  21:   <GB>b2</GB>
  22:   <GC>c3</GC>
  23:   <VALUE>40</VALUE>
  24: </Record>
  25: <Record>
  26:   <GA>a1</GA>
  27:   <GB>b2</GB>
  28:   <GC>c3</GC>
  29:   <VALUE>50</VALUE>
  30: </Record>
  31: <Record>
  32:   <GA>a2</GA>
  33:   <GB>b3</GB>
  34:   <GC>c3</GC>
  35: </Record>
  36: <Record>
  37:   <GA>a2</GA>
  38:   <GB>b3</GB>
  39:   <GC>c3</GC>
  40: </Record>
  41: <Record>
  42:   <GA>a2</GA>
  43:   <GB>b3</GB>
  44:   <GC>c3</GC>
  45: </Record>
哦耶,变化不小,属性没了,都变成ELEMENT


看到这必然要问的一个问题是,如何让某些字段显示为属性,某些字段显示为元素呢?!这个问题问得好!我们以后再说!呵呵
 
原文地址:https://www.cnblogs.com/kkun/p/2148860.html