2011-06-20 74 views
3

我遇到了在SQL Server中修改XML的問題,這對我來說似乎沒有意義。我想更新一個空節點的值,但它似乎沒有工作。例如,假設我有這樣的XML樹:在SQL XML中替換空節點的值

<root> 
    <node /> 
</root> 

,我想用「富」更新的<node />的價值,所以我有XML查詢:

UPDATE [Table] 
SET  [XmlColumn].modify(' 
     replace value of (root/node/text())[1] 
     with "foo"') 

出於某種原因,這並未沒有工作。它將節點視爲不存在。如果節點已經有一個值(例如,<node>bar</node>),那麼它工作得很好,但是當節點爲空時,它會默默地忽略該命令,甚至不會拋出任何錯誤。有沒有辦法讓SQL Server在空節點上確認replace value of

編輯:

我想這個查詢的最終結果是這樣的:

<root> 
    <node> 
     foo 
    </node> 
</root> 
+0

可能重複的,沒有文字在T-SQL](http://stackoverflow.com/questions/6254630/update-xml-field-with-no-text-in-t-sql) –

+1

真棒,Mikael。這個解決方案似乎比安德烈指出的方式更清潔。非常感謝! – Chris

回答

3

這會不會有任何幫助:http://whyiamright.wordpress.com/2008/01/02/updating-xml-column-in-sql-server-2005/

你似乎錯過了xpath開端的斜線。

編輯:然後,它似乎是這個問題的一個副本:

Update Empty XML Tag in SQL Server

+1

前導斜槓只能使路徑成爲絕對路徑。沒有它,XPath將匹配路徑以'root/node'結尾的任何節點。由於樹中沒有任何其他節點,因此在這種情況下,前導斜槓沒有任何區別。 – Chris

+1

看看這個:http://stackoverflow.com/questions/2812036/update-empty-xml-tag-in-sql-server –

4
UPDATE [Table] 
SET  [XmlColumn].modify(' insert text{"foo"} into (/root/node)[1]') 

嘗試這個工作對我來說[更新XML領域的

+0

如果不是'「foo」'我想要一個變量? http://stackoverflow.com/questions/32253235/how-to-use-if-else-statement-to-update-or-create-new-xml-node-entry-in-sql – Si8