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

使用.query('/Node')は特定のノードをクエリする方法であり、XMLDataタグを取り戻すことはできません。それが役に立てば幸い!

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

SQLフィドルの例

于 2013-01-11T18:00:57.880 に答える