2016-02-08 41 views
1

我怎麼能比包含SQL Server與特定值XML另一個節點更新XML節點

declare @x xml; 

set @x = N' 
<Root> 
    <Book> 
    <ID>1</ID> 
    <Price>100</Price> 
    <Title>false</Title> 
    </Book> 
    <Book> 
     <ID>2</ID> 
     <Price>200</Price> 
     <Price>false</Price> 
    </Book> 
    <Book> 
     <ID>3</ID> 
     <Price>300</Price> 
     <Title>false</Title> 
    </Book> 
    <Book> 
     <ID>4</ID> 
     <Price>400</Price> 
     <Title>false</Title> 
    </Book> 
</Root>' 

查詢來選擇包含ID = 3

SELECT 
@tmp = a.b.query('../.') 
from @x.nodes('//Book/ID[text()="3"]') a(b) 
一個子節點的節點

如何修改所選節點的價格值?

回答

2

考慮使用SQL Server的XML Data Modification Language (DML),特別是replace value of方法。以下示例更新Price至9999:

declare @x xml; 

set @x = N' 
<Root> 
    <Book> 
    <ID>1</ID> 
    <Price>100</Price> 
    <Title>false</Title> 
    </Book> 
    <Book> 
     <ID>2</ID> 
     <Price>200</Price> 
     <Price>false</Price> 
    </Book> 
    <Book> 
     <ID>3</ID> 
     <Price>300</Price> 
     <Title>false</Title> 
    </Book> 
    <Book> 
     <ID>4</ID> 
     <Price>400</Price> 
     <Title>false</Title> 
    </Book> 
</Root>' 

set @x.modify('replace value of (/Root/Book[ID="3"]/Price/text())[1] with ("9999")') 

select @x