xml数据类型基本用法

本文介绍了SQLServer2005 XML数据类型的简要用法,包括插入、查询和修改操作,并与XML文件进行了简单对比。通过实例展示了如何在SQLServer中使用XML数据类型进行数据存储和检索,以及与XML文件相比的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于个人水平有限,在此仅介绍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 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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值