惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
有赞技术团队
有赞技术团队
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
U
Unit 42
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Recent Announcements
Recent Announcements
Y
Y Combinator Blog
Vercel News
Vercel News
Martin Fowler
Martin Fowler
V
V2EX
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
LangChain Blog
云风的 BLOG
云风的 BLOG
H
Hackread – Cybersecurity News, Data Breaches, AI and More
aimingoo的专栏
aimingoo的专栏
G
Google Developers Blog
The GitHub Blog
The GitHub Blog
N
Netflix TechBlog - Medium
Google DeepMind News
Google DeepMind News
雷峰网
雷峰网
阮一峰的网络日志
阮一峰的网络日志
F
Fortinet All Blogs

博客园 - NPPYQ

随便唠叨下 最近的事情 远程交易中的运费问题(转自魏武挥) 浦发 同城跨行取款突然收费了 2010年8月初 泉州将地震 预言还是谣言? sql使用递归更新树级表记录 Oracle Flashback 技术 总结 (转载) 清空数据库中所有表数据的方法 ORA-08177: 无法连续访问此事务处理 (转载) Biztalk使用NativeSQL TableChangeEvent和Query 从Oracle数据库读取数据 SQL SERVER 2005中的Schema详解 如何根据值查找所在的表和字段 DOTNET网站优化(转载) SQLServer 2005新功能,一些性能方面问题,sql 经典语句(转载) 使用SqlBulkCopy类结合DataTable类快速完成对目标为SQLSERVER的数据交换 SQL SERVER 中构建执行动态SQL语句 ORACLE和SQL SERVER数据交换的二进制问题 MOSS内容数据库网站容量达到最大 导致无法新建网站 在级别Configuration 上无法解析urn 错误 滴滴心血化彩虹——记县首届名师邓四喜
sqlserver2005 xml字段的读写操作 - NPPYQ - 博客园
NPPYQ · 2010-05-20 · via 博客园 - NPPYQ

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('(mailto:root/item/@attr2)%5B2%5D%27,%27varchar(50)%27)
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(mailto:%27@attr2%27,%27varchar(20)%27) 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 (mailto:root/item/@attr2)%5B2] with "2222b"')
where id='2'

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

原文地址 : http://www.cnblogs.com/Real_Dream/articles/1586005.html