在XML节点中添加多个属性

时间:2013-05-02 09:45:23

标签: xml tsql insert sql-server-2012

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

我有以下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)

但是我收到以下错误:

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.

有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:1)

不幸的是,

  

xml数据类型的modify()方法只能在SET中使用   UPDATE语句的子句。

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

要在一个修改插入语句中添加多个属性,您可以使用以下语法:

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