2015-11-09 144 views
2

我經歷了與這個主題有關的所有問題,我似乎無法找到已經提供的答案。更新SQL Server中的XML節點

我想要做的是在xml結構中插入一個新節點。當我運行下面的代碼時,它不會發出錯誤,但XML不會包含新插入的「材質」子部分。

你們有沒有想過指出我在這裏搞亂了什麼?

DECLARE @t TABLE (rowID int IDENTITY PRIMARY KEY, XmlData XML) 

INSERT INTO @t (XmlData) 
VALUES (' 
<Root> 
<ProductDescription ProductID="01" ProductName="Widget"> 
    <Features> 
     <Warranty>1 year</Warranty> 
     <Maintenance>Monthly</Maintenance> 
    </Features> 
</ProductDescription> 
</Root> 
') 

UPDATE @t 
SET XmlData.modify('insert <Material /> as first into (/Features)[1]') 

SELECT 'before' s, DATALENGTH(XmlData) dl, XmlData 
FROM @t 
WHERE rowId = 1 

回答

2

你需要指定完整 XPath來要插入新的XML片段位置:

UPDATE @t 
SET XmlData.modify('insert <Material /> as first into (/Root/ProductDescription/Features)[1]') 

您需要使用

/Root/ProductDescription/Features)[1] 

不僅僅是

/Features)[1] 

那麼它會工作

+1

你搖滾。謝謝。我就像「爲什麼不這樣做」 –