2017-07-06 1 views
0

In SQL Server 2008 gibt es eine Tabelle mit einer XML-Spalte, die abgefragt werden soll, und der Name des Knotens, der das Kind des Knotens "Inc" ist - im Beispiel unter "Architekt" und "Professor". Wir kennen nicht alle untergeordneten Knoten (Professor, Architekt usw.), so dass wir nicht nur alle möglichen Namen für untergeordnete Knoten außen anwenden können, sondern wir müssen ihre Werte für jede Zeile extrahieren. Erste Reihe:Verschiedene untergeordnete Knoten in derselben XML-Datei

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

Zweite Reihe:

<Inc> 
     <Professor> 
      <ProfessorLevel> 
       <Maximum>100000</Maximum> 
       <Minimum>1000</Minimum> 
      </ProfessorLevel> 
     </Professor> 
    </Inc> 

Hat jemand jetzt, wie es zu tun?

+0

zeigen Ihnen das erwartete Ergebnis für beide Reihen –

Antwort

2

Verwenden local-name() Demo

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

Dank @Serg. Gibt es eine Möglichkeit, nur den Namen des ersten untergeordneten Knotens auszuwählen? Zum Beispiel, wenn es , und innerhalb gibt, würden wir nur wählen? Ihre Lösung listet alle auf. – user3853657

+0

Wie lautet die Regel, um den Knotennamen genau zu analysieren? Warum sollten "Professor" und "Professor2" als gleichwertig betrachtet werden? – Serg

+1

@ user3853657 Es könnte ausreichen, ein "[1]' Prädikat in '.nodes()' wie hier zu verwenden: 'from @ x.nodes ('Inc/* [1]') t (n)' – Shnugo

Verwandte Themen