2012-08-03 166 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