2013-09-16 34 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