AUTO模式能够根据表名来构造XML层次,并将列作为表名元素的属性,还能够通过ELEMENTS将列构造为元素。
但是有时候会出现这样的需求:取另外一个表的某列构成一个元素,或者该表的某些列为元素,某些列为属性。
这个时候,AUTO模式就无法胜任构造这样一个复杂的XML了,此时需要的是PATH模式。
PATH模式我们关注两个问题:
1,如何通过PATH模式来构造元素的属性;
2,如何通过PATH模式构造XML的多层次;
select Cust.customerid as '@Id',
cust.name,orderheader.salesorderid as 'sales/id',
detail.linetotal as 'sales/total',detail.productid as 'sales/proid',
product.name as 'sales/product/name' from
cust,orderheader,detail,product where
cust.customerid=orderheader.customerid and
orderheader.salesorderid=detail.salesorderid
and product.productid=detail.productid
for xml path('cust'),root('data')
形成的XML结果如下:
<data>
<cust Id="117">
<name>name1</name>
<sales>
<id>47660</id>
<total>4.69794</total>
<proid>765</proid>
<product>
<name>Road-650 Black, 58</name>
</product>
</sales>
</cust>
<cust Id="118">
<name>name2</name>
<sales>
<id>49857</id>
<total>4.4994</total>
<proid>852</proid>
<product>
<name>Women's Tights, S</name>
</product>
</sales>
</cust>
</data>
如例所示,可以通过带有特殊字符'@'来将某列标识为元素的属性,通过'/'来产生多层次的xml结构。
三篇《浅析数据库的FOR XML的应用》都是FOR XML在SQL SERVER中的基本应用,当然还有更多,更广泛的应用,就有待于我们在实际应用中学习,积累和总结了。





