从源“表”复制属性

时间:2014-01-07 10:17:02

标签: sql-server xml sqlxml

我正在尝试修改一大块xml并插入额外信息而不改变原始信息。

给出一个xml文档,如下所示:

<xml>
  <node att1="a" att2="b"/>
  <node att1="c" att99="d"/>
</xml>

我想实现以下输出:

<xml>
  <node extra="hello" att1="a" att2="b"><More/></node>
  <node extra="hello" att1="c" att99="d"><More/></node>
</xml>

我坚持的部分是将现有属性复制到新的xml树。

SELECT  'hello' AS [@extra],
    T.C.query('@*') AS [*] --this line doesn't work
FROM    @xml.nodes('/xml/node') T(C)
FOR XML PATH ('xml')

我希望T.C.query('@*') AS [*]部分只是复制属性而不是快乐。

如何在不知道名字的情况下复制所有属性?

1 个答案:

答案 0 :(得分:0)

您可以使用query()函数重建XML并插入属性。

declare @XML xml = '
<xml>
  <node att1="a" att2="b"/>
  <node att1="c" att99="d"/>
</xml>'

select @XML.query('element xml {
                               for $n in xml/node 
                               return element node {
                                                   attribute extra{"hello"},  $n/@*
                                                   }
                               }')