如果节点存在,则xquery替换值

时间:2013-05-06 16:11:33

标签: sql-server xquery xquery-sql xquery-update

我正在使用xQuery,如果test元素下不存在元素标记Active,我正在尝试替换User元素的值。

(我添加了引号以便能够在此正确显示...)

declare @testXML xml = '
<USER>
  <ID>10</ID>
  <TEST>1</TEST>
</USER>'

set @testXML.modify('if (exists(/USER/Active)=false)
                 then replace value of /USER/TEST with "2"
                 else ()') 
select @testXML

为此,我收到此错误:

  

XQuery [modify()]:'value'附近的语法错误,期望'else'。

我出错了什么?

1 个答案:

答案 0 :(得分:2)

不允许在表达式中嵌入replace value of ... with ..

来自replace value of (XML DML)

replace value of 
      Expression1 
with
      Expression2

你可以改用这样的东西:

set @testXML.modify('replace value of (/USER[not(Active)]/TEST/text())[1] 
                     with "2"')

SQL Fiddle