2013-03-12 19 views
7

データが必要なノードの名前がす​​べて同じXMLファイルがあります。私は最初の(または2番目のレコード)へのアクセス方法を理解しているので、次のクエリで2番目の著者(<a1>タグ)のみが表示されます。すべての著者を単一の列として取得するにはどうすればよいですか?SQL Serverを使用して同じ名前のXMLノードからすべてのデータを取得する

 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) 

答えて

12

これを試してください: -

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' 

子::ノード()child::であり、軸分離である軸指定子を表します。

このMSDN文書では、ノード内でドリルダウンするために使用される子軸を理解するために、多くのおかげで - あなたは

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

恐ろしいデータをフィルタリングするための句からで子ノード.Specify正しい軌道に乗っていた

くらいsimplier道 - :更新

またはmanipulating xml data in sql server

。それが何をしているのかを説明するリンクを教えていただけますか? – user918967

+0

あなたがまだ疑問を持っているかどうか教えてください。 – praveen

+0

@praveenここで私の質問を見てください。http://stackoverflow.com/questions/27638108/how-to-get-specific-result- from-a-search-in-a-sql-column-populated-with-xml – SearchForKnowledge

関連する問題