2012-08-03 204 views
1

我有一點XML具有以下一種格式:SQL XML解析節點

<Data> 
    <Surveys> 
    <Survey id="1"> 
     <Answers> 
     <Answer aid="1"> 
     <Answer aid="2"> 
     </Answers> 
    </Survey> 
    <Survey id="2"> 
     <Answers> 
     <Answer aid="1"> 
     <Answer aid="2"> 
     <Answer aid="3"> 
     <Answer aid="4"> 
     </Answers> 
    </Survey> 
    </Surveys> 
</Data> 

我插入到表像這樣調查(我做了這個簡單,所以不要有太多多處理)

insert into survey 
select T.o.value('@id', 'int'), 
from @xml.nodes('/Data/Surveys/Survey')as T(o) 

這是工作......但我希望把相關的答案,在同一點調查到不同的相關表。由於調查ID本身不在回答節點中,因此我無法再單獨插入stmt並再次使用節點。在C#中,我可以用LINQtoXML來做到這一點,但它解析/循環元素的速度較慢。

有沒有辦法在TSQL中做到這一點?

謝謝, 大衛

回答

0

試試這個:

select T.o.value('@id', 'int') sid, 
     A.o.value('@aid', 'int') as aid 
from @xml.nodes('/Data/Surveys/Survey')as T(o) 
    cross apply T.o.nodes('Answers/Answer') as A(o) 
+0

工作十分感謝! – DavieDave 2012-08-03 11:17:40