2017-07-06 39 views
0

在SQL Server 2008中,有一個包含XML列的表進行查詢,並且需要獲取作爲「Inc」節點的子節點的名稱 - 在示例中在「建築師」和「教授」下面。我們不知道所有的孩子節點(教授,建築師等),所以我們不能只是外部應用所有潛在的孩子節點名稱,但我們需要爲每一行提取它們的值。 第一行:同一個XML中的不同子節點

<Inc> 
    <Architect> 
     <ArchitectLevel> 
      <Average>100000</Average> 
     </ArchitectLevel> 
    </Architect> 
    </Inc> 

第二行:

<Inc> 
     <Professor> 
      <ProfessorLevel> 
       <Maximum>100000</Maximum> 
       <Minimum>1000</Minimum> 
      </ProfessorLevel> 
     </Professor> 
    </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) 
+0

感謝@Serg預期的結果。有沒有辦法只選擇第一個子節點的名字?例如,如果,之內,我們只會選擇?你的解決方案列出了所有這些。 – user3853657

+0

準確解析節點名稱的規則是什麼?爲什麼'教授'和'教授2'應該被認爲是平等的? – Serg

+1

@ user3853657在'.nodes()'中使用'[1]'謂語可能就足夠了,如'from @ x.nodes('Inc/* [1]')t(n)' – Shnugo

相關問題