[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
输出介个:
结果集是个连接,点开瞧瞧:
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
看到这必然要问的一个问题是,如何让某些字段显示为属性,某些字段显示为元素呢?!这个问题问得好!我们以后再说!呵呵
看到这必然要问的一个问题是,如何让某些字段显示为属性,某些字段显示为元素呢?!这个问题问得好!我们以后再说!呵呵
------------------------------------------
除非特别声明,文章均为原创,版权与博客园共有,转载请保留出处
BUY ME COFFEE