2009-10-14 2 views
2

요소를 찾고 수정하는 데 사용한 모든 예제를 하나로 모으려고했지만 아직 작동하지 않는 예제를 생각해 내지 못했습니다.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이 변경지고 : 나는 2005 년 나는 4 999에이 항목 ID를 변경하기 위해 노력하고있어 내가 SQL 서버에서 실행 해요, 이는 지금까지 무엇을의 아래 예를 생성 아래의 결과와 같이 4 대신 999로 설정하십시오. "/ ItemGroup [ItemID ="4 "]가 올바른 항목 그룹 >을 찾은 다음 위치 필터 [1]이 첫 번째로 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> 

나는 내 인터넷 검색 및 stackoverflowing가 아직 설정되지 않았 음을 간단하게 뭔가 느낌이왔다 나는 감사 당신의 도움!
케빈

답변

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" 
    ') 
관련 문제