2013-06-03 61 views
3

我有一个包含字段id(int)和XmlField(xml)的表(让我们称她为t)。在单个查询中插入多个节点到xml字段

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

查询是:

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

,我得到的错误:

XQuery [t.XmlField.modify()]: Syntax error near '', expected 'as', 'into', 'before' or 'after'.

当我试图只添加一个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)') 

有什么办法可以实现它吗?

回答

3

SQL Server documentation的确说得很清楚,insert语句可以处理多个节点。所以我的猜测是你的问题只是一个语法错误。 (微软的语法与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未测试)

+0

谢谢!这就解决了问题! – David