在SQL Server 2008中,有一个表要查询XML列,需要获取作为“Inc”节点子节点的节点的名称 - 在下面的示例中“Architect”和“Professor” ”。我们不知道所有子节点(教授,架构师等),所以我们不能只在外部应用所有潜在的子节点名称,但我们需要为每一行提取它们的值。 第一行:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!-- saved from url=(0016)http://localhost -->
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Untitled 2</title>
</head>
<body>
<div align="center">
<table id="table1" style="border-collapse: collapse" width="700" cellspacing="0" cellpadding="0" border="0">
<tbody>
<tr>
<td colspan="6"> </td>
</tr>
<tr>
<td colspan="6">
<a href="https://stackoverflow.com/questions/44902558/accessing-object-in-iframe-using-vba">
<img src="img.gif" width="38" height="38" border="0" align="right">
</a>
<strong>x - </strong>
</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
第二行:
<Inc>
<Architect>
<ArchitectLevel>
<Average>100000</Average>
</ArchitectLevel>
</Architect>
</Inc>
现在有人怎么做?
答案 0 :(得分:2)
使用local-name()
演示
declare @x xml =
'<Inc>
<Architect>
<ArchitectLevel>
<Average>100000</Average>
</ArchitectLevel>
</Architect>
</Inc>
<Inc>
<Professor>
<ProfessorLevel>
<Maximum>100000</Maximum>
<Minimum>1000</Minimum>
</ProfessorLevel>
</Professor>
</Inc>';
select t.n.value('local-name(.)[1]','varchar(100)')
from @x.nodes('Inc/*') t(n)