xml数据类型基本用法

来源:互联网 发布:mac oui ieee.org 编辑:程序博客网 时间:2024/05/16 18:44

由于个人水平有限,在此仅介绍SQL Server 2005xml数据类型的简要用法,并将使用xml数据类型与使用xml文件作简单比较。

注:以下所有程序均在SQL Server 2005Visual Studio 2008中调试通过

一、简要用法:

--新建一张表create table deliveryschedule(scheduleid int identity primary key,scheduledate datetime,deliveryroute int,deliverydriver nvarchar(20),deliverylist xml)--插入一条纪录insert into deliveryschedulevalues(getdate(),3,'Tom','<?xml version="1.0" ?><deliverylist><delivery salesorderid="43659"><customername>Jason Statham</customername><address>6126 North Sixth Street,Rockhampton</address></delivery><delivery salesorderid="43660"><customername>Jet Li</customername><address>6445 Cashew Street,Rockhampton</address></delivery></deliverylist>')select * from deliveryschedule;--字段的方法:--value()是取得属性的值、或元素的文本--exist()是判断是否满足某种条件--query()获取子节点本身,返回的就是XML类型的数据--modify()修改- -replace /insert/ delete--modify('replace value of (某节点元素) with "内容"')--node()类似query(),取得子节点,将XML数据转换成表--查询delivery元素select deliverydriver,deliverylist.query('/deliverylist/delivery') as deliveriesfrom deliveryschedule;--查询送货单中第一个递送的地址,字段名.value()取的是对应节点的值--[1]:第一个address元素select deliverylist.value('(/deliverylist/delivery/address)[1]','nvarchar(100)') as deliveryaddressfrom deliveryschedulewhere scheduleid=1--查找为订单送货的送货员是谁?--1代表true,代表falseselect deliverydriverfrom deliveryschedulewhere deliverylist.exist('/deliverylist/delivery[@salesorderid=43659]')=1--更改送货地址update deliveryscheduleset deliverylist.modify('replace value of (/deliverylist/delivery/address/text())[1]with "7194 Fourth St.Rockhampton"')where scheduleid=1

二、在进行程序开发时,可以使用xml文件代替xml类型的字段,以插入操作为例:

XmlDocument xmldoc = new XmlDocument();            xmldoc.Load(filepath);            XmlNode xmlnode = xmldoc.SelectSingleNode("userinfo");            XmlNodeList xmlnodelist = xmldoc.SelectSingleNode("userinfo").ChildNodes;            bool isexist = false;            for (int i = 0; i < xmlnodelist.Count; i++)            {                XmlElement xmlelem = (XmlElement)xmlnodelist.Item(i);                string struserid = xmlelem.ChildNodes[0].FirstChild.Value.Trim();                if (struserid == "003")                {                    //将userid为003的记录的usersex修改为1                    xmlelem.ChildNodes[3].FirstChild.Value = "1";                    isexist = true;                    break;                }            }            if (isexist)            {                //保存修改                xmldoc.Save(filepath);                tsslStatus.Text = "修改成功";            }

xml文件为:

<?xml version="1.0" encoding="utf-8"?><userinfo>  <user>    <userid>001</userid>    <username>卓</username>    <userage>21</userage>    <usersex>0</usersex>    <userbirth>1991-1-1</userbirth>  </user></userinfo>

使用xml数据类型实现同样功能,仅需一条SQL语句:如上“更改送货地址”语句。

代码量减少50%左右,且易修改。

三、关于xml数据类型的高级应用参考http://blog.csdn.net/pengxuan/article/details/6853985#t0