使用SQL Query读取XML标记

时间:2013-05-31 14:14:54

标签: sql-server

<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

1 个答案:

答案 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你从那些子节点中获取大学代码和名称