2011-08-12 19 views
2

私はこのようなXMLがあります。インポート親子XMLデータSQL Serverのテーブルに

<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 

どうすればいいですか?

おかげ

答えて

2

私はすべてのフィールドとすべての挿入のためにこれを書くつもりはありませんが、次の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) 
+0

ただ、 's.valueを変更することにより、 ( '名前[1]'、 'nvarchar(100)') 'に '(名前[1]'、 'varchar(100)') '私がそれをしてもこれは変わりません。 –

+0

照合を変更して動作します – Arian