当前位置: 首页 > 图文教程 > 数据库 > MSSQL > sqlserver2005 xml字段的读写操作

MSSQL
讲解数据库调优与程序员相关的几个方面
揭开微软SQL Server 2008的神秘面纱
SQL Server 2008:表值参数的创建和使用
在SQL Server 2008中运用表值参数(TVP)
解读微软SQL Server 2008空间数据
微软SQL Server 2008 的新压缩特性
带你深入了解SQL Server 2008独到之处
如何使用SQL Server 2008升级顾问
详解SQL Server 2008中的联机事务处理
解读SQL Server 2008的新语句MERGE
使用SQL Server 2008进行服务器合并
SQL Server 2008:开辟崭新数据平台
微软数据平台开发与SQL Server 2008
微软SQL Server 2008之行值构造器
SQL Server 2008 数据加载创世界记录
浅析SQL2008的Change Data Capture功能
SQL Server大数据量统计系统的经验总结
详解Windows Server 2008中的NAP
SqlServer2005对现有数据进行分区具体步骤
无数据库日志文件恢复数据库方法两则(二)

MSSQL 中的 sqlserver2005 xml字段的读写操作


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 137 ::
收藏到网摘: n/a

sqlserver2005 有xml字段了,下面是关于xml字段的相关读写操作 1.创建xml字段
在表xmlTest内创建一个字段,命名_x,设置数据类型为xml。
2.写入xml
insert into xmlTest (_x) values('
<root>
<item attr1="a1" attr2="a2">item11</item>
<item attr1="a1" attr2="a2">item12</item>
</root>
')
go
如此再插入一条记录:
insert into xmlTest (_x) values('
<root>
<item attr1="b1" attr2="b2">item21</item>
<item attr1="b1" attr2="b2">item22</item>
</root>
')
3.查询数据
3.1 查询字段所有数据
select _x from xmlText
结果如图:

3.2 查询root下面的第一个item节点
select _x.query('root/item[1]')
from xmlTest
结果:

3.3 查询root下面的第一个item节点的值
select _x.value('(root/item)[1]','varchar(50)')
from xmlTest
结果:

3.3 查询root下面的第二个item节点的attr2属性值
select _x.value('(root/item/@attr2)[2]','varchar(50)')
from xmlTest
结果:

3.4 查询表中每条记录的xml字段的item节点值,全部列出来
SELECT t2.c1.value('.','varchar(20)') as items
from xmlTest
cross apply _x.nodes('root/item') as t2(c1)
结果:

3.5 查询表中id=1记录的xml的所有item字段的attr2属性值
SELECT t2.c1.value('@attr2','varchar(20)') as attr2
from xmlTest
cross apply _x.nodes('root/item') as t2(c1)
where id='1'

结果:

3.6 查询id为1的所有节点中attr1属性为a1的第一个匹配节点的attr2属性值

select _x.value('(root/item[@attr1="a1"]/@attr2)[1]','varchar(50)')
from xmlTest where id='1'

结果:

3.7 多表查询

例如:存在另外1个table:t2,其字段xmlid关联表xmlTest,而attr1关联xmlTest的_x字段中的attr1属性值。

查询表xmlTest中id=‘1'记录中_x字段内item节点中attr1为表t2中attr1字段值时,item节点中attr2的属性值

select xmlTest._x.value('(root/item[@attr1=sql:column("t2.attr1")]/@attr2)[1]','varchar(50)') as attr2,t2.attr1
from xmlTest join t2 on t2.xmlid=xmlTest.id
where xmlTest.id='1'

4.修改数据
4.1 修改表中id=1记录的第一个item节点值
UPDATE xmlTest
set _x.modify('replace value of (root/item/text())[1] with "xxxxx"')
where id='1'

select _x.query('root/item[1]') as item1
from xmlTest
结果:

4.2 修改表中id=2记录的第二个item节点的attr2属性值
UPDATE xmlTest
set _x.modify('replace value of (root/item/@attr2)[2] with "2222b"')
where id='2'

select _x.query('root/item[2]') as item1
from xmlTest
结果: