sql server 2000 и явный xml

У меня проблема с использованием для xml в SQL Server 2000 (поэтому я не могу использовать материал new path() из sql 2005/8)

По сути, у меня есть две таблицы, и структура XML, которую я хочу иметь,

<xml>
  <table_1 field1="foo" field2="foobar2" field3="foobar3">
      <a_row_from_table_2 field1="goo" field2="goobar2" field3="goobar3" />
      <a_row_from_table_2 field1="hoo" field2="hoobar2" field3="hoobar3" />
  </table_1>
</xml>

То есть таблица_1 имеет отношение «один ко многим» с таблицей_2, и я хочу сделать из нее иерархию.

Пока что я не могу этого понять, самое близкое, что мне удалось получить, это все записи из таблицы 1 со всеми записями из таблицы 2, добавленными к самому последнему элементу таблицы 1.

Любая помощь в настройке такого рода отношений будет принята с благодарностью.

-Марчин


person Marcin    schedule 02.03.2010    source источник


Ответы (1)


Включает ли ваш запрос предложение order by? В режиме for xml explicit важно, чтобы информация появлялась в нужной последовательности. Например, в примере базы данных «Борей» вы можете сгенерировать вложенный XML для территорий сотрудников, например:

select
    1 as Tag,
    Null as Parent,
    e.EmployeeId as [Employee!1!EmployeeId],
    e.LastName as [Employee!1!LastName],
    Null as [EmployeeTerritories!2!TerritoryID]
from dbo.Employees e
union all
select 2 as Tag,
    1 as Parent,
    et.EmployeeId as [Employee!1!EmployeeId],
    Null as [Employee!1!LastName],
    et.TerritoryId as [EmployeeTerritories!2!TerritoryID]
from dbo.EmployeeTerritories et
order by [Employee!1!EmployeeId], Parent
for xml explicit

В результате получается такой XML:

<Employee EmployeeId="1" LastName="Davolio">
  <EmployeeTerritories TerritoryID="06897" />
  <EmployeeTerritories TerritoryID="19713" />
</Employee>
<Employee EmployeeId="2" LastName="Fuller">
...

Чтобы понять, как это работает, запустите запрос без for xml explicit.

person Andomar    schedule 02.03.2010