我正在尝试将我看过的所有示例拼凑起来找到元素并修改它们,但我还没有想出一些有用的东西。我在下面创建了一个示例,我在SQL Server 2005中运行。我正在尝试将ItemID 4更改为999:
DECLARE @x XML
SELECT @x = '
<ValueCollection>
<ItemGroup Name="Group A">
<ItemID>1</ItemID>
<ItemID>2</ItemID>
</ItemGroup>
<ItemGroup Name="Group B">
<ItemID>3</ItemID>
<ItemID>4</ItemID>
</ItemGroup>
</ValueCollection>
';
SET @x.modify ('
replace value of
(/ValueCollection/ItemGroup[ItemID="4"]/ItemID/text())[1]
with "999"
')
SELECT @x;
但是发生的事情是ItemID 3变为999而不是4,如下面的结果所示。我认为正在发生的是“/ ItemGroup [ItemID =”4“]正在找到正确的&lt; ItemGroup&gt;,然后位置过滤器[1]在该&lt; ItemGroup&gt;中给出第一个&lt; ItemID&gt;(其中是ID 3) - 我还没有找到如何将位置过滤器更改为变量。
<ValueCollection>
<ItemGroup Name="Group A">
<ItemID>1</ItemID>
<ItemID>2</ItemID>
</ItemGroup>
<ItemGroup Name="Group B">
<ItemID>999</ItemID>
<ItemID>4</ItemID>
</ItemGroup>
</ValueCollection>
我感觉这是一件简单的事情,我的谷歌搜索和堆栈溢出还没有出现。感谢您的帮助! 凯文
答案 0 :(得分:2)
SET @x.modify ('replace value of
(/ValueCollection/ItemGroup/ItemID[text()=4]/text())[1]
with "999"
')
或者如果你想更精确:
SET @x.modify ('replace value of
(/ValueCollection/ItemGroup[@Name="Group B"]/ItemID[text()=4]/text())[1]
with "999"
')