2017-07-06 15 views
0

SQL Server 2008では、XML列を照会するテーブルがあり、 "Inc"ノードの子であるノードの名前を取得する必要があります「建築家」と「教授」の下にある。すべての子ノード(教授、アーキテクトなど)がわからないので、すべての潜在的な子ノード名を適用することはできませんが、すべての行に対してその値を抽出する必要があります。 最初の行:同じXML内の異なる子ノード

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

2列目:

<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 '。@ x.nodes( 'Inc/* [1]')t(n)' – Shnugo

関連する問題