由于个人水平有限,在此仅介绍SQL Server 2005这xml数据类型的简要用法,并将使用xml数据类型与使用xml文件作简单比较。
注:以下所有程序均在SQL Server 2005或Visual Studio 2008中调试通过
一、简要用法:
--新建一张表
create table deliveryschedule
(
scheduleid int identity primary key,
scheduledate datetime,
deliveryroute int,
deliverydriver nvarchar(20),
deliverylist xml
)
--插入一条纪录
insert into deliveryschedule
values(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 deliveries
from deliveryschedule;
--查询送货单中第一个递送的地址,字段名.value()取的是对应节点的值
--[1]:第一个address元素
select deliverylist.value('(/deliverylist/delivery/address)[1]',
'nvarchar(100)') as deliveryaddress
from deliveryschedule
where scheduleid=1
--查找为订单送货的送货员是谁?
--1代表true,代表false
select deliverydriver
from deliveryschedule
where deliverylist.exist('/deliverylist/delivery[@salesorderid=43659]')=1
--更改送货地址
update deliveryschedule
set 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.youkuaiyun.com/pengxuan/article/details/6853985#t0