我有一个表(让我们称她为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)')
有没有办法让它成为现实?
答案 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进行测试。)