Sql server 使用SQL查询读取XML标记

Sql server 使用SQL查询读取XML标记,sql-server,Sql Server,试试这个: RegistrationCode CollegeCode CollegeName ----------------------------------------------- 12859 0001 NIMS 12859 0002 OXFORD DECLARE@input XML='1〕 12859 0001 尼姆 0002 牛津 ' 挑选 RegistrationCo

试试这个:

RegistrationCode   CollegeCode      CollegeName
-----------------------------------------------
12859              0001             NIMS
12859              0002             OXFORD
DECLARE@input XML='1〕
12859
0001
尼姆
0002
牛津
'
挑选
RegistrationCode=Univ.value('(RegistrationCode)[1],'int'),
CollegeCode=Colleges.value('(CollegeCode)[1],'int'),
CollegeName=Colleges.value(‘(CollegeName)[1]’,‘varchar(100)’)
从…起
@输入节点(“大学”)作为XTbl(大学)
交叉应用
大学节点(“学院/学院”)作为XTbl2(学院)
这给了我你想要的输出

基本上,您首先需要有一个
节点列表(这里只有一个)来获取注册码,然后从该
节点使用
交叉应用
获取
/
子节点,然后从这些子节点获取学院代码和名称

RegistrationCode   CollegeCode      CollegeName
-----------------------------------------------
12859              0001             NIMS
12859              0002             OXFORD
DECLARE@input XML='1〕
12859
0001
尼姆
0002
牛津
'
挑选
RegistrationCode=Univ.value('(RegistrationCode)[1],'int'),
CollegeCode=Colleges.value('(CollegeCode)[1],'int'),
CollegeName=Colleges.value(‘(CollegeName)[1]’,‘varchar(100)’)
从…起
@输入节点(“大学”)作为XTbl(大学)
交叉应用
大学节点(“学院/学院”)作为XTbl2(学院)
这给了我你想要的输出

基本上,您首先需要有一个
节点列表(这里只有一个)来获取注册码,然后从该
节点使用
交叉应用
获取
/
子节点,然后从这些子节点获取学院代码和名称

可能重复:可能重复:
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)