SQL Server FOR XML : Joining XML nodes into one XML

标签 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)

虽然不是最优的,但确实有效。

最佳答案

看看Columns with a Name Specified as a Wildcard Character

If the column name specified is a wildcard character (*), the content of that column is inserted as if there is no column name specified.

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

关于SQL Server FOR XML : Joining XML nodes into one XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39367959/

相关文章:

mysql - 将多个结果合并到一行

sql - MS SQL Server 的 "between"是否包含范围边界?

java - 自定义主题启动时应用程序崩溃

android - 添加文本和图标的自定义应用程序栏 - Android

iphone - 在 iPhone 应用程序中显示来自 RSS 源的内容

java - Java 中的 SQL 转义和批量插入

mysql - Advanced SQL Query Design Help(跨两个表重复,多个字段,基于一个字段可能排除)

sql-server - MSSQL WHERE 与 IF

sql-server - SQL Server 2008 MAX 和 MIN 函数在处理负数时无法按预期工作

sql - 如何从集合的角度考虑聚合函数