从表中的多个XML行中选择单个XML

时间:2013-01-11 17:27:57

标签: sql xml

我在表中有一个XML列,表中的每一行都是一个完整的XML节点。我试图简单地尝试选择这些行的子集,并使用根节点生成XML文档。我以为我可以执行以下操作,但它会在每个节点周围添加一个额外的包装器,其中包含XML列的名称。有没有什么不同我不能得到这个包装?

示例数据结构:

CREATE TABLE ActivityTable 
(
    XMLDATA AS XML
)

INSERT INTO [ActivityTable] VALUES ( '<Activity>This is activity one</Activity>' )
INSERT INTO [ActivityTable] VALUES ( '<Activity>This is activity two</Activity>' )
INSERT INTO [ActivityTable] VALUES ( '<Activity>This is activity three</Activity>' ) 

查询获取数据

SELECT 
    XMLdata FROM ActivityTable 
FOR XML PATH(''), ROOT('RootNode')

我得到了什么:

<root>
  <XMLdata>
    <Activity>This is activity one</Activity>
  </XMLdata>
  <XMLdata>
    <Activity>This is activity two</Activity>
  </XMLdata>
  <XMLdata>
    <Activity>This is activity three</Activity>
  </XMLdata>
</root>

我想要的是什么:

<root>
  <Activity>This is activity one</Activity>
  <Activity>This is activity two</Activity>
  <Activity>This is activity three</Activity>
</root>

2 个答案:

答案 0 :(得分:3)

SELECT XMLdata AS '*' 
FROM ActivityTable 
FOR XML PATH(''), ROOT('RootNode')

Columns with a Name Specified as a Wildcard Character

  

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

答案 1 :(得分:1)

使用.query('/Node')是一种查询某个节点的方法,并且您没有获得XMLData标记。希望它有所帮助!

SELECT XMLDATA.query('/Activity') FROM ActivityTable 
FOR XML PATH(''), ROOT('root')

SQL Fiddle example