2013-09-16 38 views
0

我在SQL,在那裏我有下面的聲明得到了一個存儲過程:SQL,XML中查找變量節點值,如果它存在插入額外的節點轉換成XML變量

申報@fields XML

我的SP從前端獲得值,然後執行。它通過的值看起來像這取決於用戶從前端選擇的內容。爲了這個例子的目的,我只包含了3個ID。

​​

我的問題是這樣的:

我如何找到節點= 1000,如果存在(存在),那麼插入(添加)到2個額外的節點,

<ID>992</ID><ID>993</ID> 

到我現有的'<F><ID>979</ID><ID>1000</ID><ID>989</ID></F>' xml。

如果<ID>1000</ID>不存在,則不做任何事情。

因此,如果1000存在,最終結果應該是這樣的。

<F><ID>979</ID><ID>1000</ID><ID>989</ID><ID>992</ID><ID>993</ID></F> 

如果不是,結果應該留:

<F><ID>979</ID><ID>1000</ID><ID>989</ID></F> 

我不能讓我的頭圍繞這嗎?

回答

2

檢查:

declare @fields xml = '<F><ID>979</ID><ID>1000</ID><ID>989</ID></F>' 
    , @add xml = '<ID>992</ID><ID>993</ID>' 
; 
if @fields.exist('/F[1]/ID[text()="1000"]') = 1 
    set @fields.modify('insert sql:variable("@add") as last into /F[1]'); 

select @fields 
+0

這就像一個魅力@GriGrim。 add變量被添加到我的字段xml的末尾。這爲我節省了大量精力和麻煩,重做了我的大部分SP。謝謝。 – frans

+0

我試圖在我的Insert語句中使用變量,並且出現錯誤。 – Si8

+0

http://stackoverflow.com/questions/32253235/how-to-use-if-else-statement-to-update-or-create-new-xml-node-entry-in-sql – Si8