Tsql 用于获取所有ValueName的XML节点查询

Tsql 用于获取所有ValueName的XML节点查询,tsql,Tsql,我有一个表(Table1),它有一个名为XMLColoumn的冒号,xml的一部分如下 <StudentSubjects> <ValueName>Maths</ValueName> <ValueName>Science</ValueName> <ValueName>History</ValueName> <ValueName>Calculus</ValueName>

我有一个表(Table1),它有一个名为XMLColoumn的冒号,xml的一部分如下

<StudentSubjects>
   <ValueName>Maths</ValueName>
   <ValueName>Science</ValueName>
   <ValueName>History</ValueName>
   <ValueName>Calculus</ValueName>
</StudentSubjects>
我正试图获得输出作为

StudentNo     Subjects
112           Maths
112           Science
112           History
112           Calculus
到目前为止,我的发现是

SELECT
     convert(XML,CAST(XMLCOLOUMN AS nvarchar(max)).value('(//StudentSubjects/ValueName/text())[1]','nvarchar(max)'),StudentNo from Table1
它只返回第一行即数学..如何获取所有的
请让我知道我试了很多找…但是找不到。请帮忙

您需要使用将XML分解为行

select StudentNo,
       N.value('.', 'nvarchar(max)') as Subjects
from Table1
  cross apply XMLColumn.nodes('/StudentSubjects/ValueName') as X(N)

select StudentNo,
       N.value('.', 'nvarchar(max)') as Subjects
from Table1
  cross apply XMLColumn.nodes('/StudentSubjects/ValueName') as X(N)