• [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


    看到这必然要问的一个问题是,如何让某些字段显示为属性,某些字段显示为元素呢?!这个问题问得好!我们以后再说!呵呵
     
  • 相关阅读:
    个人作业3-(Alpha阶段)
    结队编程二---单元测试
    个人作业2-英语学习APP案例分析
    结队编程一
    个人作业1——四则运算题目生成程序
    软件工程的实践项目课程的自我目标
    个人附加作业
    个人作业3——个人总结(Alpha阶段)
    结对作业2:单元测试
    个人作业2——英语学习APP案例分析
  • 原文地址:https://www.cnblogs.com/kkun/p/2148860.html
Copyright © 2020-2023  润新知