<University>
<RegistrationCode>12859</RegistrationCode>
<Colleges>
<College>
<CollegeCode>0001</CollegeCode>
<CollegeName>NIMS</CollegeName>
</College>
<College>
<CollegeCode>0002</CollegeCode>
<CollegeName>OXFORD</CollegeName>
</College>
</Colleges>
</University>
我希望使用SQL Query从上面的XML中提取。有人可以帮我吗?
RegistrationCode CollegeCode CollegeName
-----------------------------------------------
12859 0001 NIMS
12859 0002 OXFORD
答案 0 :(得分:1)
试试这个:
DECLARE @input XML = '<University>
<RegistrationCode>12859</RegistrationCode>
<Colleges>
<College>
<CollegeCode>0001</CollegeCode>
<CollegeName>NIMS</CollegeName>
</College>
<College>
<CollegeCode>0002</CollegeCode>
<CollegeName>OXFORD</CollegeName>
</College>
</Colleges>
</University>'
SELECT
RegistrationCode = Univ.value('(RegistrationCode)[1]', 'int'),
CollegeCode = Colleges.value('(CollegeCode)[1]', 'int'),
CollegeName = Colleges.value('(CollegeName)[1]', 'varchar(100)')
FROM
@input.nodes('University') AS XTbl(Univ)
CROSS APPLY
Univ.nodes('Colleges/College') AS XTbl2(Colleges)
这给了我你想要的输出。
基本上,您需要首先获得<University>
个节点列表(这里只有一个)来获取注册码,然后从<University>
节点获取<Colleges>/<College>
个子节点CROSS APPLY
你从那些子节点中获取大学代码和名称