2013-03-12 11 views
7

Mam plik XML, w którym węzły, z których potrzebuję danych, mają taką samą nazwę. Rozumiem, jak uzyskać dostęp do pierwszego (lub drugiego rekordu), więc następujące zapytanie daje mi tylko drugiego autora (znacznik <a1>). Jak uzyskać wszystkich autorów jako jedną kolumnę?Użyj programu SQL Server, aby pobrać wszystkie dane z węzłów XML o tych samych nazwach

 DECLARE @MyXML XML 
     SET @MyXML = '<refworks> 
      <reference> 
       <rt>Journal Article</rt> 
       <sr>Print(0)</sr> 
       <id>869</id> 
       <a1>Aabye,Martine G.</a1> 
       <a1>Hermansen,Thomas Stig</a1> 
       <a1>Ruhwald,Morten</a1> 
       <a1>PrayGod,George</a1> 
       <a1>Faurholt-Jepsen,Daniel</a1> 
       <a1>Jeremiah,Kidola</a1> 
       <a1>Faurholt-Jepsen,Maria</a1> 
       <a1>Range,Nyagosya</a1> 
      </reference> 
     </refworks>' 

     SELECT 
      author.value('(a1)[2]', 'varchar(MAX)') AS 'Author' 
     FROM @MyXML.nodes('/refworks/reference') AS ref(author) 

Odpowiedz

12

Spróbuj: -

SELECT 
     author.value('./text()[1]', 'varchar(MAX)') AS 'Author' 
    FROM @MyXML.nodes('//refworks/reference/child::node()') AS ref(author) 
    where author.value('local-name(.)[1]', 'varchar(100)') ='a1' 

:: węzeł podrzędny() oznacza specyfikator osi, która jest child i :: jest separatorem osi.

Aby zapoznać się z osią potomną, która służy do drążenia w dół w węźle, można znaleźć w tym dokumencie MSDN.

lub manipulating xml data in sql server

Aktualizacja: -

Znacznie prostszy sposób Byłaś na dobrej drodze .Specify węzła dziecko w klauzuli FROM do filtrowania danych

SELECT 
     author.value('(.)[1]', 'varchar(MAX)') AS 'Author' 
    FROM @MyXML.nodes('/refworks/reference/a1') AS ref(author) 
+0

niesamowite - wielkie dzięki . Czy możesz wskazać mi jakiś link wyjaśniający, co robi? – user918967

+0

Daj mi znać, jeśli nadal masz wątpliwości po przejściu przez dokumenty – praveen

+0

@praveen możesz rzucić okiem na moje pytanie tutaj: http://stackoverflow.com/questions/27638108/how-to-get-specific-result- z-a-search-in-a-sql-column-populated-with-xml – SearchForKnowledge

Powiązane problemy