有沒有辦法在SQL中將新子樹編寫到XML節點中,專門用於動態查詢?我知道可以使用insert
和delete
陳述的組合,但我正在尋找一些以相當隱含的方式工作的東西。 IE,我不想爲每個需要的特定案例編寫不同的查詢。因此,例如,說我有這樣的XML層次:在SQL中將新子樹編寫到XML節點
<root>
...
<node>
<node1>
...
</node1>
<node2>
...
</node2>
...
</node>
...
</root>
如果我想更換單個節點的值,我有這個疑問:
DECLARE @newVal varchar(max)
DECLARE @XPath varchar(max)
SELECT @newVal = 'newValue'
SELECT @XPath = 'root/node/node1/text()'
DECLARE @query varchar(max)
SET @query = '
UPDATE [dbo].[Users]
SET [NewSettingsXml].modify(''
replace value of (' + @XPath + ')[1]
with "' + @newVal + '"'')'
exec(@query)
我希望,我也只是能夠執行諸如@newVal = '<newNode>foo</newNode>'
之類的操作,其中新的XML將來自序列化的C#對象,但毫不奇怪,它將值編碼爲文本,並將其設置爲<newNode>foo</newNode>
。有沒有辦法以類似的方式做到這一點?
除非我失去了一些東西,'因爲XML'是專門針對SELECT語句。由於我在做SET,所以我認爲這不適用於此。不過,如果我錯了,請糾正我。 :) – Chris 2011-06-16 20:29:30