2009-10-14 5 views
3

속성 값을 가진 모든 요소에서 속성의 값을 변경하기 위해 modify() 문을 작성하는 것이 행운이지만 지금까지는 첫 번째로 일치하는 요소의 값만 변경할 수 있습니다. 피닉스 카디널스의 첫 번째 인스턴스 만 변경되었습니다 -이 아래의 결과를 제공 실행* all * 일치하는 요소의 속성 값을 XQuery로 바꾸는 방법은 무엇입니까?

DECLARE @x XML 
SELECT @x = ' 
<FootballApparel> 
    <Item Team="Phoenix Cardinals" Type="Hat" Cost="$14.99" /> 
    <Item Team="Indianapolis Colts" Type="Hat" Cost="$14.99" /> 
    <Item Team="Cincinnati Bengals" Type="Hat" Cost="$14.99" /> 
    <Item Team="Phoenix Cardinals" Type="Shirt" Cost="$21.99" /> 
    <Item Team="Indianapolis Colts" Type="Shirt" Cost="$21.99" /> 
    <Item Team="Cincinnati Bengals" Type="Shirt" Cost="$21.99" /> 
</FootballApparel> 
'; 

SET @x.modify(' 
    replace value of 
    (/FootballApparel/Item[@Team="Phoenix Cardinals"]/@Team)[1] 
    with "Arizona Cardinals" 
'); 

SELECT @x; 

: 나는 SQL Server 2005에서 실행하는거야 내가 지금까지 무엇을의 아래 예를 만들었습니다.

<FootballApparel> 
    <Item Team="Arizona Cardinals" Type="Hat" Cost="$14.99" /> 
    <Item Team="Indianapolis Colts" Type="Hat" Cost="$14.99" /> 
    <Item Team="Cincinnati Bengals" Type="Hat" Cost="$14.99" /> 
    <Item Team="Phoenix Cardinals" Type="Shirt" Cost="$21.99" /> 
    <Item Team="Indianapolis Colts" Type="Shirt" Cost="$21.99" /> 
    <Item Team="Cincinnati Bengals" Type="Shirt" Cost="$21.99" /> 
</FootballApparel> 

모든 인스턴스를 바꾸려면 올바른 modify() 문을 사용하여 도와 주실 수 있습니까?

감사합니다.
케빈

답변

5

당신은 매우 가까이있어 - 당신이해야 할 일이 루프 (이 경우에 그것을 할 내가 알고있는 다른 방법이 없습니다) 반복적으로 값을 대체합니다

WHILE @x.exist('(/FootballApparel/Item[@Team=sql:variable("@oldTeamName")])[1]') = 1 
SET @x.modify(' 
    replace value of (
    /FootballApparel/Item[@Team=sql:variable("@oldTeamName")]/@Team 
)[1] 
    with sql:variable("@newTeamName") 
'); 

은 그 트릭을해야합니다.

마크

+0

안녕하세요 마크, 데이터베이스의 여러 노드를 업데이트해야합니다. 하나의 xml 문을 사용할 수 있습니까? 또는 모든 노드에 대해 위에서 설명한 문을 작성해야합니까? – Radhi

+0

@ Radi : 단일 XPath 문에서 XML의 모든 노드를 선택할 수 있습니까? 그렇다면 단일 작업으로 업데이트 할 수 있습니다. 그렇지 않으면 여러 "수정"작업이 필요합니다. –

관련 문제