2013-05-02 165 views
0

我想为所有节点添加两个新属性。所有元素的属性名称和值都相同。在XML节点中添加多个属性

我有以下XML结构:

<question id="1001"></question> 
<question id="1002"></question> 
<question id="1003"></question> 
<question id="1004"></question> 

,并且希望改变它,如下所示:

<question id="1001" test1="1" test2="2"></question> 
<question id="1002" test1="1" test2="2"></question> 
<question id="1003" test1="1" test2="2"></question> 
<question id="1004" test1="1" test2="2"></question> 

我是不是能找到的属性是如何多次被添加在文档中的例子,所以我开始只添加第一个:

SELECT T.c.modify('insert attribute test1 {"1"} into (/question)[1]') 
FROM @SetQuestionsAndAnswersDetailsXML.nodes('/question') T(c) 

但是我得到了以下ng错误:

Msg 8137, Level 16, State 1, Line 89 
Incorrect use of the XML data type method 'modify'. A non-mutator method is expected in this context. 

有没有人有一个想法我做错了什么?

+0

你试着用'SELECT' ... – AakashM 2013-05-02 10:06:56

+0

@AakashM为*变化*数据,我最初的想法是改变CTE中的数据,然后连接它并将结果设置为变量。 – gotqn 2013-05-02 10:08:50

回答

0

不幸的是,

The modify() method of the xml data type can only be used in the SET clause of an UPDATE statement.

所以,我需要创建一个表变量,插入记录那里,然后修改个XML。

为了在一个添加多个属性修改插入语句,您可以使用下面的语法:

UPDATE @TempTable 
SET XMLColumn.modify('insert (attribute test1 {"1" },attribute test2 {"2"}) into (/question)[1]')