2

我在一个表中有一个 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>
4

2 回答 2

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

名称指定为通配符的列

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

于 2013-01-11T18:35:57.433 回答
1

using.query('/Node')是查询某个节点的一种方式,并且您不会返回 XMLData 标记。希望能帮助到你!

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

SQL 小提琴示例

于 2013-01-11T18:00:57.880 回答