Невозможно получить желаемый вывод при создании XML-файлов из SQL-запроса из SQL Server - PullRequest
0 голосов
/ 28 октября 2009

Я выполняю этот запрос

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

В настоящее время в базе данных есть три записи, и 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>

Я не хочу этого, мне нужен файл только с одним основным родительским узлом, а остальные должны быть его дочерними, и каждый дочерний узел может быть родительским для других дочерних узлов, но в этом должен быть только один основной родительский узел. case каждая строка является отдельным родителем и нет основного или единственного родителя

Я надеюсь, что смогу правильно ответить на мой вопрос. Спасибо

Ответы [ 3 ]

2 голосов
/ 28 октября 2009

попробуйте что-то вроде этого:

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

для xml raw: это сделает узел для каждой строки в вашей таблице, а каждый столбец - атрибутом для этого узла для xml raw ('user'): это то же самое, что xml raw, но вы указываете имя узлов для элементов xml raw ('user'): вы переходите от представления атрибута к представлению узла. каждый столбец будет узлом в вашем узле строки root ('Users'): вы можете использовать это имя для родительского root

надеюсь, это поможет

0 голосов
/ 28 октября 2009

Не на 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 в конце ??

Марк

0 голосов
/ 28 октября 2009

Я думаю, что вы хотите использовать режим FOR XML AUTO для формирования выходных данных.

...