考虑xml
<root>
<parent id="1">
<child>
<field name="1">
<value>abc</value>
</field>
<field name="2">
<value>cdf</value>
</field>
<field name="2">
<value>xyz</value>
</field>
<field name="1">
<value>uvw</value>
</field>
</child>
</parent>
<parent id="2">
<child>
<field name="1">
<value>123</value>
</field>
<field name="3">
<value>234</value>
</field>
<field name="4">
<value>34</value>
</field>
<field name="1">
<value>544</value>
</field>
</child>
</parent>
我想更新'value'的文本值,其中field node的'name'属性等于'1'
这是我现在拥有的......
update newTable
set xmlcol.modify('replace value of(/root/parent/child/field[@name="1"]/value/text()) with "newValue"')
这适用于所有事件或只是第一个???
答案 0 :(得分:1)
对于任何为我工作的人.....
BEGIN
declare @I int
;WITH XMLNAMESPACES(DEFAULT 'your namespace')
SELECT @I= xmlcol.value('count(/root/parent/child/field[@name="1"]/value/)', 'int')
FROM newTable
select @I as a
while @I > 0
begin
;WITH XMLNAMESPACES(DEFAULT 'your namespace')
update newTable set xmlcol.modify('replace value of (/root/parent/child/field[@name="1"]/value/text()) with "newValue"')
set @I = @I - 1
end
end
答案 1 :(得分:0)
这仅适用于第一个(第二个或任何@i is)事件。
declare @i int = 1;
update newTable
set xmlcol.modify('replace value of (/root/parent/child/field[@name="1"]/value/text())[{sql:variable("@i")}] with "newValue"');
您应该在循环中用新的值替换所有值。