Разработка хранимой процедуры для создания дерева XML - PullRequest
0 голосов
/ 07 ноября 2008

Мне нужно написать хранимую процедуру на сервере SQL, чьи возвращенные данные будут использованы для создания файла XML.

Мой XML-файл должен иметь структуру

<root>
<ANode></ANode>
<BNode></BNode>
<CNode>
  <C1Node>
    <C11Node></C11Node>
    <C12Node></C12Node>
  </C1Node>
  <C2Node>
    <C21Node></C21Node>
    <C22Node></C22Node>
  </C2Node>
  <C3Node>
    <C31Node></C31Node>  
    <C32Node></C32Node>  
  </C3Node>  
</CNode>
</root>

Мой вопрос заключается в том, что в хранимой процедуре мы можем выбрать значения для ANode и BNode в виде простого оператора SELECT, например

Select ANodeVal,BNodeVal from Table

Но как спроектировать хранимую процедуру для получения записей для CNode, который является поддеревом, в котором есть 3 или более (динамических) отдельных узла для каждой записи в дополнение к обычному ANode и BNode.

Ответы [ 3 ]

2 голосов
/ 08 ноября 2008

См

Вложение возвращающих XML скалярных функций

Как только вы освоитесь со вложенностью и захотите написать число скалярных функций, необходимых для построения сегментов узла снизу вверх (я бы не хотел, чтобы их было много), тогда так трудно.

2 голосов
/ 07 ноября 2008

Я бы не рекомендовал делать это в хранимых процессах. При создании на языке, таком как C # / Python или Java, модуль кода будет более тестируемым и более удобным

0 голосов
/ 07 ноября 2008

Если вы можете изменить структуру базы данных, рассмотрите возможность сохранения каждого узла в виде записи, а не в виде столбца (как указано в примере оператора выбора).

Например, каждая строка может содержать следующие поля:

  • RowId
  • ParentRowId
  • Имя
  • ROWDATA

Я предполагаю, что вы передаете данные в приложение, потому что вы указали, что возвращенные данные будут использоваться для генерации XML. В этом случае хранимая процедура будет просто оператором SELECT, оставляя форматирование приложению.

Большинство реализаций механизмов XML должны позволять вам добавлять дочерние узлы к существующим родительским узлам. XML создается в памяти и затем «экспортируется» любым методом, необходимым для получения желаемого конечного результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...