更新使用T-SQL多个XML节点

可能重复:
2005年TSQL,XML DML - 一次更新两个值?

说我有一个数据库表包含XML列。

对于每一行,在XML的结构相同(或类似),但是标记的内容是不同的。

结构看起来是这样的:

<Parent1> <Parent2> <Child> test 1 </Child> </Parent2> <Parent2> <Child> test 2 </Child> </Parent2> </Parent1>

我想做结构中每个'儿童'节点上的一些处理,并与结果进行更新。

例如,我想这个词'东西'一词取代“测试”。

所以,我不希望两个子节点落得含“东西1。

相反,我希望第一个子节点包含'的东西1'和第二子节点包含'事2“。

我可以写以下,目标在同一时间单个节点:

DECLARE @replacement NVARCHAR(4000) = 'something 1' UPDATE MyTable SET MyXMLField.modify('replace value of (Parent1[1]/Parent2[1]/Child[1]/text())[1] with sql:variable("@replacement")') WHERE Id = 1

但是,它可以编写一个T-SQL语句将处理多个节点 ,由XPath匹配,并更新他们每个人单独,根据,也就是说,一个函数的结果?

--------------解决方案-------------

你必须同时做在一个循环,一个节点。

declare @MyTable table(Id int, MyXMLField xml)
insert into @MyTable values
(1, '<Parent1>
<Parent2>
<Child>test 1</Child>
</Parent2>
<Parent2>
<Child>test 2</Child>
</Parent2>
</Parent1>')

declare @replacement nvarchar(4000) = 'something 1'
declare @Parent2Count int
select @Parent2Count = MyXMLField.value('count(/Parent1/Parent2)', 'int')
from @MyTable
where Id = 1

declare @Node int
set @Node = 1

while @Node <= @Parent2Count
begin
update @MyTable set
MyXMLField.modify('replace value of
(/Parent1/Parent2[sql:variable("@Node")]/Child/text())[1]
with sql:variable("@replacement")')
where Id = 1

set @Node = @Node + 1
end

分类:XML 时间:2015-03-15 人气:3
本文关键词: XML,TSQL,XPath的
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.245 (s). 10 q(s)