今天学习了一下SQL2005的XML特性,目的是为了将以前使用的字符串格式存入数据库的XML能够更好地支持直接查询,以前一般都需要先查询到该字段,然后再通过XMLDocument进行载入,然后再通过XPath来定位我们需要的节点,最终获得我们想要的节点值。而且还有一点特别需要注意,以前SQL2000中,如果通过数据库函数进行字符串拆解XML节点值的时候,如果XML字符串超过4000个的时候,会导致获取字符串失败的问题~
通过SQL2005的XML特性,这一切以前需要相当费力的处理只需要通过简单的查询语句直接解决!下面来看下,我们如果想改造以前的存储结构,我们需要做那些步骤:
(1) 新建表TestTable,并新建两列:ID和AttXml,其中后者的数据类型请选择“XML”
(2) 通过INSERT方法插入一条数据,主要内容是XML数据,可以参照如下:
i. <?xml version="1.0" encoding="GB2312" ?>
<Items>
<Item name=’apple’>10</Item>
<Item name=’banana’>30</Item>
</Items>
(3) 数据完成以后,让我们看看常用的几个方法:
i. Exist方法:判断节点是否符合相应的条件,例如:
1. SELECT AttXml.exist(‘/Items/Item’) FROM TestTable 返回“1”,表示存在该节点
2. SELECT * FROM TestTable WHERE AttXml.exist(‘/Items/Item[@name=”apple”]’) 返回符合条件的所有列
3. SELECT * FROM TestTable WHERE AttXml.exist(‘/Items/Item’) = 1 表示要符合有Item子节点的数据行
ii. Value方法:获取相应节点的内容,例如:
1. SELECT AttXml.value(‘/Items[1]/Item[1]’) FROM TestTable 可直接获取苹果那条数据,因为每一个节点,我们都要制定,我们要定位的是相同兄弟节点的第几个,也就是上面红色部分的含义,注意从1开始算起
iii. Query方法:获取相应的子节点,例如:
1. SELECT AttXml.query(‘/Items/Item’) FROM TestTable 会将全部的Item子节点都并列返回,且返回的内容包括节点名和节点值
以上就是一些基础的XML内容,如果我们是初级的使用的话,就可以完全满足需要了~