Импорт родительских и дочерних XML-данных в таблицы серверов Sql - PullRequest
2 голосов
/ 12 августа 2011

У меня есть такой XML-код:

    <StateTree>
      <State ID="01">
        <Name>State1</Name>
         <CityList>
          <City ID="01" Order="1" CityGroup="1" CityBuild="1" GeoLocation="X">
            <Name>City1</Name>
            <Group>1</Group>
             <AreaList>
              <Area ID="01" GeoLocation="6">
                <Name>Area1</Name>
              </Area>
              <Area ID="02" GeoLocation="6">
                <Name>Area2</Name>
              </Area>
            </AreaList>
          </City>
          <City ID="02" Order="3" CityGroup="2" CityBuild="4" GeoLocation="5">
            <Name>City2</Name>
            <Group>2</Group>
            <AreaList />
          </City>
        </CityList>
      </State>
     </StateTree>

и я хочу преобразовать его в таблицы следующим образом:

Состояние:

ID        Name
01        State1
---------------------------------------------------

Город:

ID    Order   CityGroup   CityBuild   GeoLocation   Name       State1
01    1         1           1           X           City1       01
02    3         2           4           5           City2       01
---------------------------------------------------

AreaList:

ID        GeoLocation       Name        CityID
01          6               Area1        01
02          6               Area2        01

Как я могу это сделать?

спасибо

1 Ответ

3 голосов
/ 12 августа 2011

Я не собираюсь писать это для каждого поля и всех вставок, но следующий SQL должен указать вам правильное направление:

declare @xml xml
set @xml = 
'
<StateTree>
      <State ID="01">
        <Name>State1</Name>
         <CityList>
          <City ID="01" Order="1" CityGroup="1" CityBuild="1" GeoLocation="X">
            <Name>City1</Name>
            <Group>1</Group>
             <AreaList>
              <Area ID="01" GeoLocation="6">
                <Name>Area1</Name>
              </Area>
              <Area ID="02" GeoLocation="6">
                <Name>Area2</Name>
              </Area>
            </AreaList>
          </City>
          <City ID="02" Order="3" CityGroup="2" CityBuild="4" GeoLocation="5">
            <Name>City2</Name>
            <Group>2</Group>
            <AreaList />
          </City>
        </CityList>
      </State>
     </StateTree>

'

--Select States
select
    ID = s.value('@ID','varchar(10)'),
    Name = s.value('Name[1]','varchar(100)')
from 
    @xml.nodes('/StateTree/State') x(s)

--Select Cities
select
    ID = c.value('@ID','varchar(10)'),
    Name = c.value('Name[1]','varchar(100)'),
    StateID = c.value('../../@ID','varchar(10)')
from
    @xml.nodes('/StateTree/State/CityList/City') x(c)

--Select Areas
select
    ID = a.value('@ID','varchar(10)'),
    Name = a.value('Name[1]','varchar(100)'),
    CityID = a.value('../../@ID','varchar(10)')
from
    @xml.nodes('/StateTree/State/CityList/City/AreaList/Area') x(a) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...