在单个查询中将多个节点插入xml字段

时间:2013-06-03 15:34:17

标签: sql-server sql-server-2008 xquery

我有一个表(让我们称她为t),其中包含字段id(int)和XmlField(xml)。

我尝试在一个查询中添加多个节点,但无论我尝试了什么,我都会遇到错误。

查询是:

update t 
set XmlField.modify('insert <f1>value here</f1><f2>value there</f2> into (/xmldoc)') 

我收到了错误:

  

XQuery [t.XmlField.modify()]:''附近的语法错误,'''变为','变为','之前'或'之后'。

当我尝试只添加一个xml节点时,它正在工作(例子):

update t set XmlField.modify('insert <f1>value here</f1> into (/xmldoc)') 

当我尝试添加这样的嵌套节点时,它也正常工作:

update t set XmlField.modify('insert <f><f1>value here</f1><f2>value there</f2></f> into (/xmldoc)') 

有没有办法让它成为现实?

1 个答案:

答案 0 :(得分:5)

SQL Server documentation确实清楚地说明insert语句可以处理多个节点。所以我的猜测是你的问题只是一个语法错误。 (Microsoft语法与XQuery Update Facility spec中定义的略有不同,但它的识别相似。)

我会尝试将元素f1和f2组合成一个序列并将它们包装在括号中(规范在这里需要一个ExprSingle,这意味着不允许使用顶级逗号):

update t 
set XmlField.modify(
  'insert (<f1>value here</f1>, <f2>value there</f2>) into (/xmldoc)') 

(未针对SQL Server进行测试。)