0

このクエリを実行しています

select category "ROOT/category",
question "Category/question",
option1 "Category/option1"
from testDB2 for XML PATH ('ROOT') , ELEMENTS

現在、データベースには3つのエントリがあり、取得したxmlファイルはこれです

<ROOT>
  <ROOT>
    <category>maths</category>
  </ROOT>
  <Category>
    <question>2+2?</question>
    <option1>1</option1>
  </Category>
</ROOT>
<ROOT>
  <ROOT>
    <category>maths</category>
  </ROOT>
  <Category>
    <question>100*0</question>
    <option1>0</option1>
  </Category>
</ROOT>
<ROOT>
  <ROOT>
    <category>chemistry</category>
  </ROOT>
  <Category>
    <question>H2O?</question>
    <option1>water </option1>
  </Category>
</ROOT>

私はこれを望んでいません。メインの親ノードを 1 つだけ持ち、残りをその子として持つファイルが必要です。各子は他の子ノードの親になることができますが、メインの親ノードは 1 つだけである必要があります。この場合は各行別の親であり、メインまたは単一の親はありません

質問を適切に伝えることができれば幸いです。ありがとう

4

3 に答える 3

2

このようなことを試してください:

select category, question, option1 from testdb2 for xml raw('Category'), elements, root('Categories')

for xml raw: これにより、テーブル内の各行のノードが作成され、すべての列がそのノードの属性になります for xml raw('user'): これは xml raw と同じですが、ノードの名前を指定しますxml raw('user') 要素: 属性ビューからノード ビューに切り替えます。すべての列は、行ノード root('Users') のノードになります。これを使用して、親ルートに名前を付けることができます

お役に立てれば

于 2009-10-28T19:25:03.910 に答える
0

あなたが本当に何を望んでいるのか100%確信が持てませんが、これはどうですか:

SELECT 
   category '@Name',
   question "Category/question",
   option1 "Category/option1"
FROM
   dbo.testDB2 
FOR XML PATH('Category'), ROOT('ROOT')

それはあなたが望むものに近づいていますか?私が間違っていなければ (今はテストできません)、次のようになります。

  <ROOT>
    <Category Name="maths">
      <question>100*0</question>
      <option1>0</option1>
    </Category>
    <Category Name="chemistry">
      <question>H2O?</question>
      <option1>water </option1>
    </Category>
  </ROOT>

そうでない場合は、データのサンプル行をいくつか投稿していただけますか?また、最終的に SELECT から得られるものは何ですか??

マルク

于 2009-10-28T20:14:45.320 に答える
0

FOR XML AUTO モードを使用して出力を整形する必要があると思います。

于 2009-10-28T19:26:07.570 に答える