2009-10-14 46 views
2

我試圖拼湊所有我見過的用於查找元素和修改它們的例子,但是我還沒有想出一些可用的例子。我創建了下面的是我到目前爲止,這是我在SQL Server快到爲例2005年,我試圖改變項目ID 4至999:如何用XQuery更改匹配的元素文本?

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; 

但是發生了什麼是項目ID 3得到改變到999而不是4,如下面的結果所示。我認爲發生的事情是「/ ItemGroup [ItemID =」4「]找到正確的<ItemGroup>,然後位置過濾器[1]給出<ItemID>中的第一個<ItemID>(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> 

我有一種感覺它是簡單的東西,我的google搜索和stackoverflowing還沒有止跌回升但我欣賞你幫助!
Kevin

回答

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" 
    ')