SQL Server FOR XML:将XML节点连接到一个XML中

时间:2016-09-07 10:53:58

标签: sql sql-server xml

我有一张如下表格:

DECLARE @myTable TABLE (Ordinal INT, MyXML XML)
INSERT INTO @myTable (Ordinal, MyXML) VALUES (1, '<Item AnyAttribute="anyValue">1</Item>')
INSERT INTO @myTable (Ordinal, MyXML) VALUES (1, '<Item AnyAttribute="anyValue">2</Item>')

当我将XML片段加入一个大的XML时:

SELECT MyXML AS 'OmitMe' FROM @myTable FOR XML PATH(''), ROOT('Items'), TYPE

我明白了:

 <Items>
  <OmitMe>
    <Item AnyAttribute="anyValue">1</Item>
  </OmitMe>
  <OmitMe>
    <Item AnyAttribute="anyValue">2</Item>
  </OmitMe>
</Items>

但我想得到:

<Items>
    <Item AnyAttribute="anyValue">1</Item>
    <Item AnyAttribute="anyValue">2</Item>
</Items>

使用变量不是一个选项,因为这意味着必须像光标一样循环机制。

任何帮助将不胜感激!

马丁

编辑:

Ed Harper提供的解决方案可以纳入更大的方案中:

SELECT CAST(REPLACE(CAST((SELECT MyXML AS Items FROM @myTable FOR XML PATH ('')) AS NVARCHAR(MAX)),N'</Items><Items>',N'') AS XML)

这是次优的,但确实有效。

1 个答案:

答案 0 :(得分:2)

查看Columns with a Name Specified as a Wildcard Character

  

如果指定的列名是通配符(*),则为内容   插入该列,就像没有指定列名一样。

SELECT MyXML AS '*' FROM @myTable FOR XML PATH(''), ROOT('Items'), TYPE