首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

XML类型字段内容修改的有关问题,

2012-01-12 
XML类型字段内容修改的问题,急。。。最近才刚刚接触XML字段的相关操作,遇到一个问题,想请教一下各位。比如,表

XML类型字段内容修改的问题,急。。。
最近才刚刚接触XML字段的相关操作,遇到一个问题,想请教一下各位。
比如,表 A 中有一个 XML 类型的字段 XMLData ,其内容为:
<root>
  <items>
  <item ID="1" status="2"/>
  <item ID="5" status="6"/>
  <item ID="9" status="8"/>
  ...(有n个item节点,每个节点的 ID 属性和 status 属性是任意的整数。)
  </items>
</root>

我想做的事其实很简单,就是把 <items> 节点下的所有 <item> 节点的 status 属性置为 1
请问应该怎么写SQL语句呢?

我目前用的是如下语句:
update A set 
XMLData.modify
('replace value of (/root/items/item/@status)[1] 
with "1"')
可这样做,每次只修改了其中一个<item>节点。

[解决办法]

SQL code
declare @x xml;set @x='<root>  <items>  <item ID="1" status="2"/>  <item ID="5" status="6"/>  <item ID="9" status="8"/>  </items></root>';select @x.query('<root>                   <items>                      {                         for $i in //items/item                            return <item ID="{$i/@ID}" status="1" />                      }                  </items>                 </root>')
[解决办法]
SQL code
-- 建测试表create table t11(id int,x xml)insert into t11select 1,'<root>  <items>  <item ID="1" status="2"/>  <item ID="5" status="6"/>  <item ID="9" status="8"/>  </items></root>'declare @x xmlselect @x=x from t11 where id=1select ID = T.c.value('@ID[1]', 'nvarchar(1)'), status= T.c.value('@status[1]', 'int')into #t11from @x.nodes('/root/items/item') T(c)update #t11 set status=1update t11 set x=(select '<root><items>'+cast((select * from #t11 for xml raw('item')) as varchar(2000))+'</items></root>')where id=1select x from t11x-----------------------------------------------------------------------<root><items><item ID="1" status="1" /><item ID="5" status="1" /><item ID="9" status="1" /></items></root> 

热点排行